Hi,
ich versuche einen einfachen Grafik Editor zu machen. Er soll beim Klick Punkte in das zentralle Panel einfügen. Die alten Punkte sollen bei jedem neuen Klick erhalten bleiben.
Die Punkte werden auch gezeichnet, im Panel unten wird auch beim anklicken der verschiedenen Menüpunkte aufgelistet, welchen Menüpunkt man angeklickt hat.
Jedoch wird schon beim ersten Punkt die Menüleiste verdoppelt oder andere Abstrusitäten entstehen.. es werden Punkte diagonal doppelt angezeigt etc. Sobald ich z.B. das Fenster vergrößere per Hand, wird die Anzeige vollkommen normal wie ich sie eigentlich haben will, aber nach einem erneuten Klick ist alles wieder doppelt drin.
Leider finde ich nicht meinen Fehler
Desweiteren soll eigentlich die Zeichenfläche weiss sein, aber auf setBackground(Color.WHITE); reagiert das Panel nicht.
Hier ist mein Code. Vllt findet jemand den Fehler und könnte mir erklären bzw. zeigen was ich falsch mache.
So sieht das nach ein paar Klicks aus.
Schon mal danke im Vorraus für die Hilfe
ich versuche einen einfachen Grafik Editor zu machen. Er soll beim Klick Punkte in das zentralle Panel einfügen. Die alten Punkte sollen bei jedem neuen Klick erhalten bleiben.
Die Punkte werden auch gezeichnet, im Panel unten wird auch beim anklicken der verschiedenen Menüpunkte aufgelistet, welchen Menüpunkt man angeklickt hat.
Jedoch wird schon beim ersten Punkt die Menüleiste verdoppelt oder andere Abstrusitäten entstehen.. es werden Punkte diagonal doppelt angezeigt etc. Sobald ich z.B. das Fenster vergrößere per Hand, wird die Anzeige vollkommen normal wie ich sie eigentlich haben will, aber nach einem erneuten Klick ist alles wieder doppelt drin.
Leider finde ich nicht meinen Fehler
Desweiteren soll eigentlich die Zeichenfläche weiss sein, aber auf setBackground(Color.WHITE); reagiert das Panel nicht.
Hier ist mein Code. Vllt findet jemand den Fehler und könnte mir erklären bzw. zeigen was ich falsch mache.
Java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class GraphEditor extends JFrame implements ActionListener {
private JMenuBar mb = new JMenuBar();
private JMenu graph = new JMenu("Graph");
private JMenuItem oeffnen = new JMenuItem("open");
private JMenuItem neu = new JMenuItem("new");
private JMenuItem speichern = new JMenuItem("save");
private JMenu vertex = new JMenu("Vertex");
private JMenuItem insert = new JMenuItem("insert");
private JMenuItem delete = new JMenuItem("delete");
private JMenuItem move = new JMenuItem("move");
private JMenuItem none = new JMenuItem("none");
private JTextField textf = new JTextField("none");
private JLabel sa = new JLabel("Selected Action");
private JPanel unten = new JPanel();
private Zeichenflaeche flaeche = new Zeichenflaeche();
public GraphEditor(String s) {
super(s);
// Menu
graph.add(oeffnen);
graph.add(neu);
graph.add(speichern);
mb.add(graph);
oeffnen.addActionListener(this);
neu.addActionListener(this);
speichern.addActionListener(this);
vertex.add(insert);
vertex.add(delete);
vertex.add(move);
vertex.add(none);
mb.add(vertex);
insert.addActionListener(this);
delete.addActionListener(this);
move.addActionListener(this);
none.addActionListener(this);
this.setJMenuBar(mb);
// Panel in der Mitte und Panel unten
textf.setColumns(15);
textf.setBackground(Color.LIGHT_GRAY);
textf.setEditable(false);
unten.add(sa);
unten.add(textf);
add(unten, BorderLayout.SOUTH);
this.add(flaeche);
}
class Zeichenflaeche extends JPanel implements MouseListener{
private ArrayList<Kreis> kreise = new ArrayList<Kreis> ();
public Zeichenflaeche(){
setBackground(Color.WHITE);
addMouseListener(this);
}
private class Kreis {
private int x, y, dx, dy;
public Kreis(int x, int y, int dx, int dy) {
this.x = x;
this.y = y;
this.dx = dx;
this.dy = dy;
}
}
public void mouseClicked(MouseEvent e) {
kreise.add(new Kreis(e.getX(), e.getY(), 10, 10));
repaint();
}
public void mouseEntered(MouseEvent e) {};
public void mouseExited(MouseEvent e) {};
public void mousePressed(MouseEvent e) {};
public void mouseReleased(MouseEvent e) {};
public void paint(Graphics g) {
g.setColor(Color.black);
for (Kreis k: kreise) {
g.fillOval(k.x, k.y, k.dx, k.dy);
}
}
}
public void actionPerformed(ActionEvent e){
if(e.getSource() == oeffnen) textf.setText("Graph: open");
if(e.getSource() == neu) textf.setText("Graph: new");
if(e.getSource() == speichern) textf.setText("Graph: save");
if(e.getSource() == insert) textf.setText("Vertex: insert");
if(e.getSource() == move) textf.setText("Vertex: move");
if(e.getSource() == delete) textf.setText("Vertex: delete");
if(e.getSource() == none) textf.setText("none");
}
public static void main(String[] args) {
GraphEditor f = new GraphEditor("MyGraphEditor");
f.pack();
f.setSize(800,600);
f.setVisible(true);
}
}
So sieht das nach ein paar Klicks aus.
Schon mal danke im Vorraus für die Hilfe