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

Stromberg

Mitglied
Hallo,

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

Java:
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,
Java:
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
 
Du kannst in den Code eingreifen und z.b. die paintComponent überschreiben.
Einfach auf das JPanel Rechte Maustaste -> Quelltext anpassen.
 
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?
 
indem du z.b. ne boolean variable einführst:
Java:
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.
 
indem du z.b. ne boolean variable einführst:
Java:
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.
stimmt...hätte man auch selber drauf kommen können 😀

vielen Dank 🙂
 

Zurück
Oben