paint verwenden

Status
Nicht offen für weitere Antworten.
H

hermie

Gast
Hallo,

ich möchte gerne drei verschiedene geometrische Formen zeichnen lassen die ich dann immer wieder verwenden kann. Ich würde gerne für jede Figur eine Klasse schreiben. über das objekt der Klasse soll zb die Groesse der geometrischen figur verändert werden. Ich weiss nicht wie ich das mit der methode paint machen kann da ja nur Graphics als Parameter übergeben werden kann.
 

André Uhres

Top Contributor
In "paintComponent" malen wir einfach nur die Figur, ohne uns um die Grösse zu kümmern.
Wenn wir die Grösse der Figur ändern, dann rufen wir einfach repaint auf und
"paintComponent" malt dann automatisch die Figur neu (mit der neuen Grösse):
Code:
/*
 * DrawShape.java
 */
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class DrawShape extends JFrame {
    private JPanel panel;
    private JToolBar toolbar;
    private JTextField sizeField;
    private Circle circle;
    private int SW = 14;//stroke width (Strichdicke)
    public DrawShape() {
        super("DrawShape");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(400, 300);
        setLocationRelativeTo(null);
        circle = new Circle(50, 50, 90);
        panel = new JPanel() {
            private Stroke stroke = new BasicStroke(SW);
            @Override
            protected void paintComponent(final Graphics g) {
                super.paintComponent(g);
                ((Graphics2D)g).setStroke(stroke);
                g.setColor(Color.RED);
                circle.draw(g);
            }
        };
        getContentPane().add(panel);
        toolbar = new JToolBar();
        sizeField = new JTextField(String.valueOf(circle.getDiameter()));
        sizeField.selectAll();
        toolbar.add(new JLabel("Type size and press Enter: "));
        toolbar.add(sizeField);
        add(toolbar, BorderLayout.NORTH);
        sizeField.addActionListener(new ActionListener() {
            public void actionPerformed(final ActionEvent e) {
                int d = Integer.parseInt(sizeField.getText());
                if(d < SW){
                    d = SW;
                    sizeField.setText(String.valueOf(d));
                }
                /*
                 Die multi-arg Version von repaint erlaubt uns, das Cliprechteck
                 der Komponente zu schrumpfen (den Bereich des Bildschirmes,
                 der durch den Malvorgang beeinflusst wird), damit der Malvorgang
                 leistungsfähiger werden kann. Wir verwenden diese Technik, um zu
                 vermeiden, Bildabschnitte neu zu malen, die nicht
                 geändert haben. Die keine-arg Version dieser Methode malt immer
                 die gesamt Fläche der Komponente neu.

                 Wenn wir das Cliprechteck schrumpfen, rufen wir repaint nicht einmal,
                 sondern zweimal auf. Der erste Aufruf malt den Bereich der Komponente neu,
                 in dem die Figur vorher war (das ererbte Verhalten ist,
                 den Bereich mit der gegenwärtigen Hintergrundfarbe zu füllen.).
                 Der zweite Aufruf malt den Bereich der Komponente neu, in dem die
                 Figur zur Zeit ist.

                 Wir können repaint innerhalb des gleichen Eventhandlers mehrfach aufrufen,
                 aber Swing nimmt diese Informationen und malt die Komponente in
                 einem einzigen Vorgang neu.
                 */
                panel.repaint(circle.getX() - SW/2, circle.getY() - SW/2, circle.getDiameter() + SW,
                        circle.getDiameter() + SW);
                circle.setDiameter(d);
                panel.repaint(circle.getX() - SW/2, circle.getY() - SW/2, circle.getDiameter() + SW,
                        circle.getDiameter() + SW);
                sizeField.selectAll();
            }
        });
    }
    public static void main(final String[] args) {
        Runnable gui = new Runnable() {
            public void run() {
                new DrawShape().setVisible(true);
            }
        };
        //GUI must start on EventDispatchThread:
        SwingUtilities.invokeLater(gui);
    }
}
class Circle {
    private int x;
    private int y;
    private int diameter;
    public Circle(final int x, final int y, final int diameter) {
        this.x = x;
        this.y = y;
        this.diameter = diameter;
    }
    public void draw(final Graphics g) {
        g.drawOval(x, y, diameter, diameter);
    }
    public int getDiameter() {
        return diameter;
    }
    public void setDiameter(int durchmesser) {
        this.diameter = durchmesser;
    }
    public int getX() {
        return x;
    }
    public void setX(int x) {
        this.x = x;
    }
    public int getY() {
        return y;
    }
    public void setY(int y) {
        this.y = y;
    }
}
 
H

hermie

Gast
Vielen Dank erstmal für die Antwort!!
Ich wollte eigentlich einen Kreis ein Dreieck und ein Rechteck erstellen.
Es sollen in einer Zeile jeweils zehn dieser geometrischen Figuren stehen wobei die Reihenfolge zufällig gewählt wird.
nachdem 10 mal die 1 gedrückt wurde soll die nächste zeile drunter erstellt werden. usw...
 

André Uhres

Top Contributor
...wobei tiefgründige Informationen über Ziel, Zweck und
Funktionalitäten des Produktes sicher hilfreich wären,
denn eine oberflächliche Beschreibung, wie du sie vorschlägst,
führt wohl immer zu Missverständnissen :wink:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H 2D-Grafik Problem mit Paint AWT, Swing, JavaFX & SWT 1
frager2345 Warum paintComponent hier und nicht paint AWT, Swing, JavaFX & SWT 2
U Was ist der Unterschied von paint und paincomponent? AWT, Swing, JavaFX & SWT 3
L 2D-Grafik Swing paint|paintComponent AWT, Swing, JavaFX & SWT 2
krgewb 2D-Grafik paint-Methode wird zu oft ausgeführt AWT, Swing, JavaFX & SWT 5
S Zeichen ohne paint-Methode AWT, Swing, JavaFX & SWT 2
J Swing Wann brauche ich @Override vor der paint()-Methode? AWT, Swing, JavaFX & SWT 1
G Eine paint-Methode, 2 Welten? AWT, Swing, JavaFX & SWT 3
H Swing + Paint: Mehrere Objekte zeichnen lassen AWT, Swing, JavaFX & SWT 3
A paint-Methode aufrufen AWT, Swing, JavaFX & SWT 13
Xanny 2D-Grafik Beginner! Probleme mit Swing, Gprahics class und paint AWT, Swing, JavaFX & SWT 13
L Berechnungen in paint AWT, Swing, JavaFX & SWT 8
S Grafik: Programm kommt nicht zur paint()-Methode AWT, Swing, JavaFX & SWT 6
W Paint-Methode in anderer Klasse funktioniert nicht AWT, Swing, JavaFX & SWT 7
S 2 Paint-Methoden in einer Klasse ? AWT, Swing, JavaFX & SWT 2
J zwei Paint methoden in einer Klasse AWT, Swing, JavaFX & SWT 3
P Paint und paintComponent AWT, Swing, JavaFX & SWT 12
F 2D-Grafik Was ruft die Paint - Methode auf ? AWT, Swing, JavaFX & SWT 2
S JButton u. Label auf paint-Methode AWT, Swing, JavaFX & SWT 1
S 2 paint-Methoden in einer Klasse ? AWT, Swing, JavaFX & SWT 2
S Paint Methode ohne implements JPanel AWT, Swing, JavaFX & SWT 1
S Farbe ändern bei der paint-Methode AWT, Swing, JavaFX & SWT 5
J ActionListener soll auf paint() Methode zugreifen AWT, Swing, JavaFX & SWT 1
J Problem mit der paint Methode AWT, Swing, JavaFX & SWT 0
Junb 2D-Grafik paint() Methode bugt? AWT, Swing, JavaFX & SWT 2
C JFrame paint ohne hintergrund nutzen AWT, Swing, JavaFX & SWT 6
I Paint-Methode von nicht statischen Objekten aufrufen AWT, Swing, JavaFX & SWT 3
A Swing Paint mit Button Clear den Hintergrund säubern um wieder zeichnen zu können AWT, Swing, JavaFX & SWT 2
K 2D-Grafik Paint - Wie binde ich repaint ein? AWT, Swing, JavaFX & SWT 8
D JSlider "laggt" nach überschreiben der paint methode AWT, Swing, JavaFX & SWT 2
S paint() verzögern AWT, Swing, JavaFX & SWT 9
K AWT begrenzte anzahl paint aufrufe AWT, Swing, JavaFX & SWT 6
B Infolabel Probleme mit Paint() ? AWT, Swing, JavaFX & SWT 8
L AWT paint mit ArrayList und Iterator AWT, Swing, JavaFX & SWT 3
Furtano AWT paint braucht ein Graphics Objekt ? AWT, Swing, JavaFX & SWT 2
L Swing 64bit Problem mit paint/paintComponent AWT, Swing, JavaFX & SWT 7
A Paint Methode externer auruf AWT, Swing, JavaFX & SWT 5
T JFrame und paint() AWT, Swing, JavaFX & SWT 5
B Ablauf der paint-Methoden von JComponents AWT, Swing, JavaFX & SWT 20
J AWT Methode paint() AWT, Swing, JavaFX & SWT 4
F 2D-Grafik Hostkomponentengröße in paint AWT, Swing, JavaFX & SWT 2
L JFrame an Paint-Inhalt anpassen AWT, Swing, JavaFX & SWT 6
E Warum übermalt paint das ganze Fenster? AWT, Swing, JavaFX & SWT 15
X Bild via FileChooser in paint-Methode laden AWT, Swing, JavaFX & SWT 2
T paint() wird nicht aufgerufen AWT, Swing, JavaFX & SWT 8
M JMenuBar im Applet und paint AWT, Swing, JavaFX & SWT 9
G paint-Methode kopiert GUI AWT, Swing, JavaFX & SWT 14
H paint überlappend AWT, Swing, JavaFX & SWT 5
E paint AWT, Swing, JavaFX & SWT 3
H Swing paint() von JPanel wird nicht aufgerufen AWT, Swing, JavaFX & SWT 10
L AWT Paint(g) im Listener aufrufen AWT, Swing, JavaFX & SWT 2
S JCheckBox Paint AWT, Swing, JavaFX & SWT 7
F AWT Probleme mit der paint() methode AWT, Swing, JavaFX & SWT 2
C Unterschiedlicher Aufruf der paint() Methode ? (AWT/Swing) AWT, Swing, JavaFX & SWT 2
L Problem mit paint Methode und Bild AWT, Swing, JavaFX & SWT 7
F Swing Paint mit Canvas Element AWT, Swing, JavaFX & SWT 35
K AWT paint wird nicht aufgerufen AWT, Swing, JavaFX & SWT 7
R LayoutManager Image Paint + Text Panel AWT, Swing, JavaFX & SWT 10
F paint-Methode des JComboboxEditorComponent AWT, Swing, JavaFX & SWT 2
S Threads in einen Frame zeichnen lassen (Paint()?!) AWT, Swing, JavaFX & SWT 5
radiac Swing JFrame - paint(g) - FrameObjects bei activeRendering AWT, Swing, JavaFX & SWT 3
I AWT paint() in MouseEvent aufrufen klappt nicht AWT, Swing, JavaFX & SWT 8
T paint() wird zweimal ausgeführt AWT, Swing, JavaFX & SWT 6
hdi Swing JLabel & paint-Methode gemixt - wie schlimm wirklich? AWT, Swing, JavaFX & SWT 5
N Paint methode anhalten und neustarten AWT, Swing, JavaFX & SWT 5
H AWT Wann ist paint() fertig? AWT, Swing, JavaFX & SWT 7
R [gelöst]Fenster schließen - trotz Endlosschleife in der Paint-Methode? AWT, Swing, JavaFX & SWT 3
W Steuerelemente und paint() in einem JPanel AWT, Swing, JavaFX & SWT 3
M Allgemeines zur paint Methode AWT, Swing, JavaFX & SWT 5
M AWT Component/Canvas erzeugt unerwünschten Rahmen bei paint AWT, Swing, JavaFX & SWT 3
T Dialog ohne Frame, direktes paint in graphics AWT, Swing, JavaFX & SWT 5
G Probleme mit repaint / paint AWT, Swing, JavaFX & SWT 6
A paint()-Methode für Videoexport nutzen AWT, Swing, JavaFX & SWT 2
K repaint() ruft paint() nicht auf AWT, Swing, JavaFX & SWT 14
J Canvas / paint() AWT, Swing, JavaFX & SWT 2
bugmenot paint() verzögert ausgeführt? AWT, Swing, JavaFX & SWT 4
S paint() in anderen Methoden AWT, Swing, JavaFX & SWT 5
J getFontMetrics außerhalb von paint(Graphics g) AWT, Swing, JavaFX & SWT 8
D Paint() Methode aus einer anderen Klasse aufrufen AWT, Swing, JavaFX & SWT 6
S java.awt.Component und paint() AWT, Swing, JavaFX & SWT 4
A Paint funktioniert nicht richtig AWT, Swing, JavaFX & SWT 7
L Dynamisches Ändern der Größe in JPanel mit paint()-Methode AWT, Swing, JavaFX & SWT 8
G JScrollPane mit "paint" scrollt nicht AWT, Swing, JavaFX & SWT 2
C paint-Methode überschreiben AWT, Swing, JavaFX & SWT 19
hdi meine paint-methode macht faxen? AWT, Swing, JavaFX & SWT 21
T Variable Menge an Bildern außerhalb paint() zeichnen? AWT, Swing, JavaFX & SWT 2
G Paint und Buttons AWT, Swing, JavaFX & SWT 8
G JFrame JPanel und Paint(Image)? AWT, Swing, JavaFX & SWT 6
S Programm aufgrund von paint() zu langsam AWT, Swing, JavaFX & SWT 18
G paint() wird aufgerufen, aber nicht angezeigt AWT, Swing, JavaFX & SWT 10
G 2x Graphics in einer paint() miteinander verbinden AWT, Swing, JavaFX & SWT 11
M Probleme mit paint() aus JFrame AWT, Swing, JavaFX & SWT 2
G paint() Methode aus anderer klasse aufrufen? AWT, Swing, JavaFX & SWT 6
G Frage zum paint Prozess AWT, Swing, JavaFX & SWT 3
D JPanel und Paint AWT, Swing, JavaFX & SWT 2
B Gui und Zeichnen (paint ? ) AWT, Swing, JavaFX & SWT 4
L Anzeigen von fotos: ImageIcon oder BufferedImage + paint() ? AWT, Swing, JavaFX & SWT 5
G Frage zur paint-Methode (AWT) AWT, Swing, JavaFX & SWT 9
B Button anzeigen bei überschrieber paint() AWT, Swing, JavaFX & SWT 12
N paint Methode im JFrame AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen


Oben