Hi,
ich habe in Eclipse ein JFrame gebastelt. Dort sitzt ein JPanel drauf, auf dem ich zeichnen möchte. Gezeichnet wird jeweils mit einem Buttonklick. Nun stört mich, dass beim ersten Klick auf dne Button zwar gezeichnet wird, direkt das Bild gleich wieder gelöscht wird - danach funktioniert es wie gewünscht. Wie kann ich das Abstellen?
... und hier wird gezeichnet ...
Das Zeichnen erscheint im Moment etwas komplitiert, ich möchte aber später erweitern, z. B. mit einer Möglichkeit zum Zoomen.
ich habe in Eclipse ein JFrame gebastelt. Dort sitzt ein JPanel drauf, auf dem ich zeichnen möchte. Gezeichnet wird jeweils mit einem Buttonklick. Nun stört mich, dass beim ersten Klick auf dne Button zwar gezeichnet wird, direkt das Bild gleich wieder gelöscht wird - danach funktioniert es wie gewünscht. Wie kann ich das Abstellen?
Java:
public class DrawFrame extends JFrame implements MouseMotionListener {
static final long serialVersionUID = 1;
private JPanel contentPane;
private JTextField tfNumber;
private JLabel lStatus;
private JPanel zeichenblatt;
private JComboBox cbSelect;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
DrawFrame frame = new DrawFrame();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public DrawFrame() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 757, 560);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
...
zeichenblatt = new JPanel();
zeichenblatt.setBackground(Color.WHITE);
zeichenblatt.setBounds(10, 11, 600, 500);
contentPane.add(zeichenblatt);
zeichenblatt.addMouseMotionListener(this);
}
public void mouseDragged(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mouseMoved(MouseEvent e) {
lStatus.setText("Maus: ("+e.getX()+"|"+e.getY()+")");
}
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}
// Methoden zum Zeichnen
public void drawOrder() {
int count = -1;
try
{
count = new Integer(tfNumber.getText()).intValue();
} catch(Exception ex) {}
if( count > 0 )
{
for( int j = 0; j < count; j++ )
{
switch (cbSelect.getSelectedIndex())
{
case 0:
drawLineParam(zeichenblatt.getGraphics(),
(int) (Math.random()*zeichenblatt.getWidth()),
(int) (Math.random()*zeichenblatt.getHeight()),
(int) (Math.random()*zeichenblatt.getWidth()),
(int) (Math.random()*zeichenblatt.getHeight()));
break;
}
}
}
else
JOptionPane.showMessageDialog(null, "Für die Anzahl der Operationen eine positive Zahl angeben, danke");
}
}
... und hier wird gezeichnet ...
Java:
public class DrawLib{
// Setzen eines Pixel simulieren
public static void setPixel(Graphics g, int x, int y)
{
g.setColor(new Color(0,0,0)); // Zeichenfarbe schwarz
g.drawRect(x, y, 0, 0); // Pixelsetzen
}
// Zeichnen einer Linie mit Parametern
protected static void drawLineParam(Graphics g, int x1, int y1, int x2, int y2)
{
int x, y, dx, dy;
double r, step;
dy = y2 - y1; // Hoehenzuwachs
dx = x2 - x1; // Schrittweite
step = 1.0 / Math.sqrt(dx*dx + dy*dy); // Parameterschritt berechnen
for(r=0.0; r < 1; r+=step) // fuer jeden Parameterwert
{
x = (int)(x1 + r*dx +0.5); // berechne neue x-Koordinate
y = (int)(y1 + r*dy +0.5); // berechne neue y-Koordinate
setPixel(g,x,y); // setze Pixel
}
setPixel(g,x2, y2); // letztes Pixel am Endpunkt
}
}
Das Zeichnen erscheint im Moment etwas komplitiert, ich möchte aber später erweitern, z. B. mit einer Möglichkeit zum Zoomen.