# auf einem mit Netbeans (GUI) erstellten JPanel (eines JFrames) zeichnen?



## Stromberg (10. Okt 2010)

Hallo, 

Ich habe mit Netbeans (GUI) ein JFrame erzeugt und da dadrauf ein JPanel gelegt (sprich der Code wurde generiert).


```
package test;


public class NewJFrame extends javax.swing.JFrame {

    
    public NewJFrame() {
        initComponents();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        testP = new javax.swing.JPanel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        javax.swing.GroupLayout testPLayout = new javax.swing.GroupLayout(testP);
        testP.setLayout(testPLayout);
        testPLayout.setHorizontalGroup(
            testPLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 239, Short.MAX_VALUE)
        );
        testPLayout.setVerticalGroup(
            testPLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 246, Short.MAX_VALUE)
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(130, 130, 130)
                .addComponent(testP, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(140, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(62, 62, 62)
                .addComponent(testP, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(101, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NewJFrame().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify
    private javax.swing.JPanel testP;
    // End of variables declaration

}
```

Nun habe ich folgende Frage:
Wie kann ich auf dem JPanel zeichnen (mit paint() oder paintComponent())?

Normalerweise würde ich es direkt bei der Instanzierung des JPanels probieren,

```
testP = new javax.swing.JPanel(){
      public void paint(Graphics g) {
      //Zeichenanweisungen    
     }
};
```
aber das ist nicht möglich, weil der generierte Code geschützt ist (sprich, ich kann ihn nicht ändern oder ergänzen).

Es wäre sehr nett, wenn ihr mir helfen könntet. 

Gruß
Stromberg


----------



## Gast2 (10. Okt 2010)

Du kannst in den Code eingreifen und z.b. die paintComponent überschreiben.
Einfach auf das JPanel Rechte Maustaste -> Quelltext anpassen.


----------



## Stromberg (10. Okt 2010)

EikeB hat gesagt.:


> Du kannst in den Code eingreifen und z.b. die paintComponent überschreiben.
> Einfach auf das JPanel Rechte Maustaste -> Quelltext anpassen.


Danke für die schnelle Antwort. Es hat super geklappt. 

_Eine Frage hätte jedoch noch:_
In meinem Programm später soll erst gezeichnet werden, wenn auf einen Button geklickt wurde.
Wie löse ich dann das Problem?


----------



## Gast2 (10. Okt 2010)

indem du z.b. ne boolean variable einführst:

```
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    if (paint) {
        /** image zeichnen */
    }
}
```
Jetzt kannst du irgendwann in deinem Programm paint auf true setzen, einmal repaint() aufgerufen und dann wird dein Bild gezeichnet.


----------



## Stromberg (11. Okt 2010)

EikeB hat gesagt.:


> indem du z.b. ne boolean variable einführst:
> 
> ```
> public void paintComponent(Graphics g) {
> ...


stimmt...hätte man auch selber drauf kommen können 

vielen Dank


----------



## L-ectron-X (11. Okt 2010)

Ich glaube, ich hätte repaint() nach Erfüllung der entspr. Bedingung außerhalb der paintComponent()-Methode aufgerufen.


----------



## Stromberg (11. Okt 2010)

L-ectron-X hat gesagt.:


> Ich glaube, ich hätte repaint() nach Erfüllung der entspr. Bedingung außerhalb der paintComponent()-Methode aufgerufen.



Ich glaube so hatte es EikeB auch gemeint, oder?


----------



## Gast2 (11. Okt 2010)

Stromberg hat gesagt.:


> Ich glaube so hatte es EikeB auch gemeint, oder?


Ganz genau.


----------

