B
BrooKy
Gast
Hallo nochmal,
mein Zeichenprog ist fast fertig, allerdings hab ich noch 2 kleine Probleme:
1. Beim Minimieren des Fensters verschwindet alles bisher gezeichnete
2. Beim Aufruf der paintComponent-Methode wird irgendein komischer Murks mitgezeichnet, der Teile aus dem Menu von der linken Seite mitmalt.
Das erste Problem ist eigentlich weniger wild, aber Nummer 2 ist ziemlich blöde. Ich fürchte, ich hab den Graphics-Krams noch nicht so ganz durchblickt...
mein Zeichenprog ist fast fertig, allerdings hab ich noch 2 kleine Probleme:
1. Beim Minimieren des Fensters verschwindet alles bisher gezeichnete
2. Beim Aufruf der paintComponent-Methode wird irgendein komischer Murks mitgezeichnet, der Teile aus dem Menu von der linken Seite mitmalt.
Das erste Problem ist eigentlich weniger wild, aber Nummer 2 ist ziemlich blöde. Ich fürchte, ich hab den Graphics-Krams noch nicht so ganz durchblickt...
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Paint extends JFrame {
Container c;
Linie l = new Linie();
JPanel menu;
JComboBox penc;
JComboBox bgc;
String[] auswahl = {"Schwarz", "Weiss", "Blau", "Gelb", "Grün", "Rot"};
Color[] colors = {Color.BLACK, Color.WHITE, Color.BLUE, Color.YELLOW, Color.GREEN, Color.RED};
/**
* Erzeugt 2 JComboBoxes für die Auswahl der Farben, ein JPanel mit einem Menu und fügt
* alle Komponenten ein
*/
public Paint(){
c = getContentPane();
c.setLayout(new BorderLayout());
bgc = new JComboBox(auswahl);
bgc.addActionListener(new BgListener());
penc = new JComboBox(auswahl);
penc.addActionListener(new PenListener());
menu = new JPanel();
menu.setLayout(new GridLayout(25,1));
menu.add(new JLabel(" Hintergrund:"));
menu.add(bgc);
menu.add(new JLabel(" Stift:"));
menu.add(penc);
c.add(menu, BorderLayout.WEST);
c.add(l, BorderLayout.CENTER);
}
/**
* Veranlasst die Änderung der Hintergrundfarbe
*/
class BgListener implements ActionListener {
public void actionPerformed (ActionEvent e) {
l.setBackground(colors[bgc.getSelectedIndex()]);
}
}
/**
* Veranlasst die Änderung der Stiftfarbe
*/
class PenListener implements ActionListener {
public void actionPerformed (ActionEvent e) {
l.setPenColor(colors[penc.getSelectedIndex()]);
}
}
/**
* Erzeugt ein neues Fenster
* @param args
*/
public static void main(String[] args) {
Paint fenster = new Paint();
fenster.setSize(800,600);
fenster.setTitle("Tolles Java-Paint");
fenster.setVisible(true);
fenster.setResizable(false);
fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Linie extends JPanel {
private int xAlt, yAlt, xNeu, yNeu;
private boolean paintBG = true;
private Color penColor = Color.BLACK;
public Linie () {
super.setBackground(Color.BLACK);
addMouseListener(new MHandler());
addMouseMotionListener(new MMHandler());
}
/**
* Überschriebene paintComponent-Methode, die zunächst gegebenenfalls den Hintergrund
* und dann die neue Linie zeichnet.
*/
public void paintComponent (Graphics g) {
if (paintBG) {
super.paintComponent(g);
paintBG = false;
}
g.setColor(penColor);
g.drawLine(xAlt, yAlt, xNeu, yNeu);
xAlt = xNeu;
yAlt = yNeu;
}
/**
* Ändert die Farbe des Hintergrundes
* @param c Neue Farbe des Hintergrundes
*/
public void setBackground (Color c) {
super.setBackground(c);
paintBG = true;
repaint();
}
/**
* Ändert die Farbe des Linie
* @param c Neue Farbe der Linie
*/
public void setPenColor (Color c) {
penColor = c;
}
/**
* Speichert bei Tastendruck die aktuelle Maus-Position
*/
class MHandler extends MouseAdapter {
public void mousePressed (MouseEvent e) {
xAlt = e.getX();
yAlt = e.getY();
}
}
/**
* Speichert die Maus-Position bei Loslassen der Taste und veranlasst das Zeichnen der Linie
*/
class MMHandler extends MouseMotionAdapter {
public void mouseDragged (MouseEvent e) {
xNeu = e.getX();
yNeu = e.getY();
repaint();
}
}
}