hi,
bin ein absoluter JAVA-Anfänger und steh vor einer Aufgabe, die ich nicht ganz check ...
ich möchte in Swing ein Rechteck zeichnen und es dann ein bisschen "nachbearbeiten" können
beschränken wir uns mal aufs Zeichnen des Rechtecks:
ich hab
1. meinen JFrame
2. meine ContentPane (mit Hintergrund Bild)
3. eine GlassPane auf der ich mein Rechteck zeichnen möchte
4. einen MouseMotionListener auf die Glaspane
mein Code sieht z.Zt. so aus:
Sinn der ganzen Sache wäre, dass ich im MouseDragged irgendwie das Rechteck zeichne ...
warscheinlich muss ich eh noch einen MouseListener einbauen, damit ich Start (MousePressed) und Endpunkt (MouseReleased) meines Rechtecks rausfind, aber ich scheiter schon beim Zeichnen eines einfachen Rechtecks!
die Tutorials sagen, dass es eine paintComponent Methode gibt (die ich für meine GlassPane auch finde) und dass ich diese Methode überschreiben muss ...
wie kann ich das machen?
Warum bekomme ich immer einen Fehler, dass ich meine Graphics nicht instanzieren kann? Ist sie abstrakt? Wie kann ich das lösen?
mfg, guni
bin ein absoluter JAVA-Anfänger und steh vor einer Aufgabe, die ich nicht ganz check ...
ich möchte in Swing ein Rechteck zeichnen und es dann ein bisschen "nachbearbeiten" können
beschränken wir uns mal aufs Zeichnen des Rechtecks:
ich hab
1. meinen JFrame
2. meine ContentPane (mit Hintergrund Bild)
3. eine GlassPane auf der ich mein Rechteck zeichnen möchte
4. einen MouseMotionListener auf die Glaspane
mein Code sieht z.Zt. so aus:
Code:
import java.awt.image.ImageObserver;
import java.text.AttributedCharacterIterator;
import javax.swing.*;
public class Main {
public static void main(String[] args) {
// Erstellt das Swing-Fenster
JFrame fenster = new JFrame("Kalibrierungsmodul");
// Swing anweisen, das Programm zu beenden, wenn das Fenster geschlossen wird
fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// die Content Pane des Fensters
final Container content = fenster.getContentPane();
content.setLayout(new FlowLayout());
// erzeuge Bild
ImageIcon karte = new ImageIcon( Main.class.getResource( "arab_pennisula.gif" ) );
JLabel label = new JLabel( karte );
// erzeuge Button
JButton button = new JButton("Testbutton");
button.setSize(100, 100);
// füge Komponenten hinzu
content.add(button);
content.add(label);
// erzeugt den Glass Pane + Button
final JButton glassButton = new JButton("Glassbutton");
final JPanel glass = (JPanel)fenster.getGlassPane();
glass.add(glassButton);
glass.setVisible(true);
// erzeuge MouseListener für die GlassPane
/*
glass.addMouseListener(new MouseListener() {
public void mouseClicked(MouseEvent arg0) {}
public void mouseEntered(MouseEvent arg0) {}
public void mouseExited(MouseEvent arg0) {}
public void mousePressed(MouseEvent arg0) {
glassButton.setText(""+arg0.getX());
}
public void mouseReleased(MouseEvent arg0) {
glassButton.setText("TEST");
}
});
*/
// erzeuge MouseMotionListener für die GlassPane
glass.addMouseMotionListener(new MouseMotionListener() {
public void mouseDragged(MouseEvent arg0) {
glass.paintComponents(g);
}
public void mouseMoved(MouseEvent arg0) {}
});
// erzeuge Action Listener für den Button
glassButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
glass.setVisible(false);
content.repaint();
}
});
// Zeigt das Fenster an
fenster.pack();
fenster.setSize(1024, 768);
fenster.setLocationRelativeTo(null);
fenster.setVisible(true);
}
// überschreibe die PaintComponent
public void paintComponent(Graphics g, int x1, int y1, int x2, int y2){
g.setColor(Color.cyan);
g.drawRect(x1, y1, x2, y2);
}
}
Sinn der ganzen Sache wäre, dass ich im MouseDragged irgendwie das Rechteck zeichne ...
warscheinlich muss ich eh noch einen MouseListener einbauen, damit ich Start (MousePressed) und Endpunkt (MouseReleased) meines Rechtecks rausfind, aber ich scheiter schon beim Zeichnen eines einfachen Rechtecks!
die Tutorials sagen, dass es eine paintComponent Methode gibt (die ich für meine GlassPane auch finde) und dass ich diese Methode überschreiben muss ...
wie kann ich das machen?
Warum bekomme ich immer einen Fehler, dass ich meine Graphics nicht instanzieren kann? Ist sie abstrakt? Wie kann ich das lösen?
mfg, guni