# paint Methode im JFrame



## Nathy (18. Jan 2007)

Ich habe ein Swing Programm, in welchem ich ein Rechteck zeichnen möchte.
Dafür habe ich die Methode paint(Graphics g) eingefügt. Wie kann ich aber diese jetzt aufrufen. Habe es einmal mit rpaint() versucht. Funktioniert leider nicht. Hier der Code:

```
package Programm;

import java.io.*;
import javax.swing.table.AbstractTableModel; 
import javax.swing.*;
import javax.swing.border.BevelBorder;
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable; 
 import javax.swing.table.DefaultTableModel;

public class GUI extends JFrame implements ActionListener{
    
    private JFrame frame = new JFrame();

    JButton btnStart = new JButton("Start");
    JButton btnReset = new JButton("Reset");
    
    JLabel lblTitel = new JLabel("Robotersteuerung");
    JTextField txtX = new JTextField();
    JTextField txtY = new JTextField();
    JLabel lblX = new JLabel("x-Koordinate");
    JLabel lblY = new JLabel("y-Koordinate");
    JLabel lbll1 = new JLabel("");
    JLabel lbll2 = new JLabel("");

    public GUI() {

    }
    
    /**
    * Diese Methode initialisiert das GUI und startet dieses
    */
    public void initGUI()
    {

        JPanel panelButtonLabel = new JPanel();
        panelButtonLabel.setLayout(new GridLayout(4,2,10,10));
        panelButtonLabel.add(lblX);
        panelButtonLabel.add(txtX);
        panelButtonLabel.add(lblY);
        panelButtonLabel.add(txtY);
        panelButtonLabel.add(btnStart);
        panelButtonLabel.add(lbll1);
        panelButtonLabel.add(btnReset);
        panelButtonLabel.add(lbll2);
        
        JPanel panelAuswahl = new JPanel();
        panelAuswahl.setLayout(new FlowLayout());
        panelAuswahl.add(flasche);
        panelAuswahl.add(golfball);
        
        JPanel panelUnterteilung = new JPanel();
        panelUnterteilung.setLayout(new GridLayout(2,2,10,10));
        panelUnterteilung.add(lblTitel);
        panelUnterteilung.add(panelAuswahl);
        panelUnterteilung.add(panelButtonLabel);
        
        btnStart.addActionListener(this);
        btnReset.addActionListener(this);
        
        frame = new JFrame("Robotersteuerung");
        frame.setSize(900,500);
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	frame.setLayout(new BorderLayout());
        
        Container contentPane = frame.getContentPane();
        contentPane.setLayout(new BorderLayout());
        contentPane.add(panelUnterteilung, BorderLayout.CENTER);
        JMenuBar menuBar = new JMenuBar();
        JMenuItem beenden = new JMenuItem("Beenden");
        JMenuItem ueber = new JMenuItem("Über Robotersteuerung");
        beenden.addActionListener(this);
        ueber.addActionListener(this);
        JMenu menu = new JMenu("Menu");
        menu.add(beenden);
        JMenu hilfe = new JMenu("Hilfe");
        hilfe.add(new JMenuItem("Über Robotersteuerung"));        
        hilfe.add(ueber);
        menuBar.add(menu);
        menuBar.add(hilfe);
        frame.setJMenuBar(menuBar);
        System.out.println(frame.getSize());
        frame.setVisible(true);
        repaint();
    }

  
    public void actionPerformed(ActionEvent e)
    {
        if(e.getActionCommand()=="Beenden"){
            System.out.println("Beenden");
            System.exit(0);
        }
        if(e.getActionCommand()=="Über Robotersteuerung"){
            System.out.println("Über Robotersteuerung");
            
        }    
    }
    public void paint(Graphics g)
    {
        System.out.println("Test");
        g.drawLine(100,100,20,300);
        g.drawRect(10,10,100,100);
    }
        public static void main(String[]args){
        GUI myGUI = new GUI();
        myGUI.initGUI();
    }
}
```


----------



## L-ectron-X (18. Jan 2007)

Zunächst mal zeichnet man in Swing nicht in der paint()-Methode, sondern in der paintComponent()-Methode.
Und dann solltest du nicht ins Fenster Zeichnen, sondern auf ein JPanel.
Du leitest also eine Klasse von JPanel ab und zeichnest dort dein Rechteck.

Und: Du leitest deine Klasse von JFrame ab, erzeugst aber im Konstruktor deiner Klasse einen weiteren JFrame, dem du dann all deine gewünschten Eigenschaften zuweist. Du arbeitest hier mit zwei JFrames, einer muss raus.


----------



## thE_29 (18. Jan 2007)

Zeichnet der überhaupt etwas?

Und adde mal nix auf den Container um zu sehen obs gehen würde und probiere lieber die Methode paintComponent(Graphics g)


----------



## André Uhres (18. Jan 2007)

```
...
public class GUI extends JFrame implements ActionListener{
    private JFrame frame;
...
    public void initGUI() {
        frame = this;
...
//        frame = new JFrame("Robotersteuerung");
...
    }
...
    public void paint(Graphics g) {
        super.paint(g);
...
    }
...
}
```
Das funktioniert zwar, aber normal macht man das nicht so.


----------

