且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

在多个JPanels中绘图

更新时间:2023-12-05 22:32:40

您所有的JPanel变量都引用普通的JPanels,而不是覆盖的类.

All your JPanel variables refer to plain vanilla JPanels, not to the overridden classes.

因此请考虑更改此内容:

so consider changing this:

private JPanel panel1;
private JPanel panel2;
private JPanel panel3;

public Demo(String string) {
    // ...

    JPanel topPanel = new JPanel();
    topPanel.setLayout( new BorderLayout() );
    getContentPane().add( topPanel );

    // Create the panels
    new MyJPanel1();
    new MyJPanel2();
    new MyJPanel3();


    // ...
}

private class MyJPanel1 extends JPanel{

    public MyJPanel1(){
        panel1 = new JPanel();
        panel1.setLayout( new BorderLayout() );
        panel1.setPreferredSize(new Dimension(200,500));
    }

    @Override 
    public void paintComponent(Graphics g) { 
        //super.paintComponent(g); 

        g.drawString("BLAH1", 20, 20); 
        g.drawRect(200, 200, 200, 200); 
        //setVisible(true);
    } 


}
//.... etc

对此:

private JPanel panel1;
private JPanel panel2;
private JPanel panel3;

public Demo(String string) {
    // ...

    JPanel topPanel = new JPanel();
    topPanel.setLayout( new BorderLayout() );
    getContentPane().add( topPanel );

    // Create the panels
    panel1 = new MyJPanel1();
    panel2 = new MyJPanel2();
    panel3 = new MyJPanel3();


    // ...
}

private class MyJPanel1 extends JPanel{

    public MyJPanel1(){
        // panel1 = new JPanel();
        setLayout( new BorderLayout() );
        setPreferredSize(new Dimension(200,500));
    }

    @Override 
    public void paintComponent(Graphics g) { 
        //super.paintComponent(g); 

        g.drawString("BLAH1", 20, 20); 
        g.drawRect(200, 200, 200, 200); 
        //setVisible(true);
    } 


}
//.... do the same with the other JPanel classes