Frage von NobodyTreeTwo, 9

Hey ich habe eine Frage, wieso klappt da nicht PaintComponent?

package samitorkamani; import java.awt.; import java.awt.event.;

import javax.swing.*;

public class ZufälligeRechtecke extends JPanel implements ActionListener {

//index entweder: 0,1,10
private int index  = 0;
//Seite des Rechtecks
private int seite = 20;
//width + height
private int width  = (int)(Math.random()*(601-seite));
private int height = (int)(Math.random()*(401-seite));
//Zufällige Farben

public void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.setColor(Color.RED);
    g.fillRect(100, 100, 50, 50);
    //for ( int i = 0 ; i < index ; i++ ) {
    //  g1.setColor(Color.black);
    //  g1.fillRect(width, height, seite, seite);
    //}
}

public ZufälligeRechtecke () {
    
    //Objekte
    JFrame f = new JFrame();
    JPanel p2 = new JPanel();
    JPanel p1 = new JPanel();
    JButton reset = new JButton("Reset!");
    JButton eins = new JButton("1 Rechteck!");
    JButton zehn = new JButton("10 Rechtecke!");
    Box buttons = Box.createHorizontalBox();
    
    //Buttons + Panel
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setTitle("Zufällige Rechtecke");
    p1.setLayout(new BoxLayout(p1, BoxLayout.Y_AXIS));
    
    //*****************Buttons*****************
    
    //Reset
    buttons.add(Box.createHorizontalGlue());
    buttons.add(Box.createRigidArea(new Dimension( 50, 0 )));
    buttons.add(reset);
    reset.addActionListener(this);
    
    //Eins
    buttons.add(Box.createRigidArea(new Dimension( 50, 0 )));
    buttons.add(eins);
    eins.addActionListener(this);
    
    //Zehn
    buttons.add(Box.createRigidArea(new Dimension( 50, 0 )));
    buttons.add(zehn);
    zehn.addActionListener(this);
    buttons.add(Box.createRigidArea(new Dimension( 50, 0 )));
    buttons.add(Box.createHorizontalGlue());
    
    //*****************Panel*****************
    p2.setPreferredSize(new Dimension(600, 400));
    p2.setBackground(Color.GREEN);
    
    p1.add(buttons);
    p1.add(p2);
    
    //main
    f.setContentPane(p1);
    f.pack();
    f.setLocationRelativeTo(null);
    f.setVisible(true);
    
}

public static void main(String[] args) {
    new ZufälligeRechtecke();
}

@Override
public void actionPerformed(ActionEvent arg0) {
    
    switch(arg0.getActionCommand()) {
        case "Reset!":
            System.out.println("Reset!");
            index = 0;
            System.out.println(index);
            repaint();
            this.repaint();
            break;
        case "1 Rechteck!":
            System.out.println("1 Rechteck!");
            index = 1;
            System.out.println(index);
            this.repaint();
            break;
        case "10 Rechtecke!":
            System.out.println("10 Rechtecke!");
            index = 10;
            System.out.println(index);
            this.repaint();
            break;
    }
    
}

}

Expertenantwort
von KnusperPudding, Community-Experte für Java, 2

Deine Klasse leitet von JPanel ab. Du fügst diese Klasse aber nirgends in deinem Code an. - Entsprechend wird auch nie paintComponent() ausgeführt.

Ändere mal folgende Zeile ab, damit solltest du weiter kommen:

JPanel p2 = new JPanel();

zu

JPanel p2 = this;

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten