Hallo,
Ich schreiben ein Programm in dem ein Kreis gezeichnet wird bei dem ich in Masseinheit [mm] für den Druchmesser angeben kann.
Mit der Pixelangabe funktioniert das schon sehr gut aber zum Eingeben fänd ich Millimeter schöner.
Der Kreis soll jetzt im selben Verhältnis ausgedruckt werden. Das Ausdrucken funktioniert auch schon nur ist es nicht genau das selbe Verhältnis sonder der Ausdruck auf Papier ist grösser.
Ich habe jetzt gelesen das für jeden Drucker oder Bildschidschirm die Pixel (Auflösung) verschieden ist. Gibt es in Java vielleicht eine Lösung das ich bei unterschiedlichen Druckern und Bildschirmen eine einheitliche Grösse bekomme. ( Ich möchte nicht das das Programm auch auf meinem Laptop und einem anderen Drucker die Masse ausgiebt).
Also meine Frage noch mal zusammengefasst:
- Würde gerne Pixel in mm umrechnen
- Das Bild das angezeigt wird sollte genau in der selben Grösse auch ausgedruckt werden.
- Wenn das ginge sollte das auch auf unterschiedlichen Druckern und Bildschrimen mit den Selben Massen funktionieren.
viele Grüsse munuel
Ich schreiben ein Programm in dem ein Kreis gezeichnet wird bei dem ich in Masseinheit [mm] für den Druchmesser angeben kann.
Mit der Pixelangabe funktioniert das schon sehr gut aber zum Eingeben fänd ich Millimeter schöner.
Der Kreis soll jetzt im selben Verhältnis ausgedruckt werden. Das Ausdrucken funktioniert auch schon nur ist es nicht genau das selbe Verhältnis sonder der Ausdruck auf Papier ist grösser.
Ich habe jetzt gelesen das für jeden Drucker oder Bildschidschirm die Pixel (Auflösung) verschieden ist. Gibt es in Java vielleicht eine Lösung das ich bei unterschiedlichen Druckern und Bildschirmen eine einheitliche Grösse bekomme. ( Ich möchte nicht das das Programm auch auf meinem Laptop und einem anderen Drucker die Masse ausgiebt).
Also meine Frage noch mal zusammengefasst:
- Würde gerne Pixel in mm umrechnen
- Das Bild das angezeigt wird sollte genau in der selben Grösse auch ausgedruckt werden.
- Wenn das ginge sollte das auch auf unterschiedlichen Druckern und Bildschrimen mit den Selben Massen funktionieren.
PHP:
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Arc2D;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintException;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.SimpleDoc;
import javax.print.attribute.DocAttributeSet;
import javax.print.attribute.HashDocAttributeSet;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class PrintingFrame {
static double _durchmesser = 100;
static class KreisDruck extends JPanel implements Printable {
double _dX = 100;
double _dY= 100;
double _startAngle=0;
double _dDegPos=180;
double _dDegNeg=180;
public void paint(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setPaint(Color.BLUE);
g2d.setStroke(new BasicStroke(10));
Arc2D _arc= new Arc2D.Double(_dX,_dY,_durchmesser,_durchmesser,_startAngle,360,Arc2D.OPEN);
g2d.draw(_arc);
}
public int print(Graphics g, PageFormat pageFormat, int pageIndex) {
if (pageIndex == 0) {
paint(g);
return Printable.PAGE_EXISTS;
} else {
return Printable.NO_SUCH_PAGE;
}
}
} // KreisDruck
public static void main(String args[]) throws Exception {
final JFrame frame = new JFrame();
JPanel paneNorth = new JPanel();
JPanel paneSouth = new JPanel();
Container contentPane = frame.getContentPane();
final Component printIt = new KreisDruck();
contentPane.add(printIt, BorderLayout.CENTER);
JButton bDrucken = new JButton("Drucken");
JButton bZeichnen = new JButton("Zeichnen");
paneSouth.setLayout(new BoxLayout(paneSouth,BoxLayout.X_AXIS));
paneSouth.add(bDrucken);
paneSouth.add(bZeichnen);
JLabel jl = new JLabel("Druchmesser [mm]");
final JTextField tf = new JTextField();
tf.setText("100");
paneNorth.setLayout(new BoxLayout(paneNorth, BoxLayout.X_AXIS));
paneNorth.add(jl);
paneNorth.add(tf);
contentPane.add(paneSouth,BorderLayout.SOUTH);
contentPane.add(paneNorth,BorderLayout.NORTH);
ActionListener listener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().compareTo("Drucken")==0){
//------Drucker
DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PRINTABLE;
PrintService printService = PrintServiceLookup
.lookupDefaultPrintService();
DocPrintJob job = printService.createPrintJob();
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
DocAttributeSet das = new HashDocAttributeSet();
Doc doc = new SimpleDoc(printIt, flavor, das);
try {
job.print(doc, pras);
} catch (PrintException pe) {
pe.printStackTrace();
}
}
if (e.getActionCommand().compareTo("Zeichnen")==0){
_durchmesser = Double.valueOf(tf.getText());
frame.repaint();
}
}// actionPerformed
};
bDrucken.addActionListener(listener);
bZeichnen.addActionListener(listener);
frame.setSize(350, 350);
}
}
viele Grüsse munuel