java - 如何在.form创建的子面板上绘图?

标签 java swing jpanel draw paintcomponent

我想在由 .form 创建的子面板上绘图。有一个“mainPanel”,其中包含三个子面板,名为 panel1(顶部)、panel2(左下)和 panel3(右下)。

现在我想在子面板“panel1”上画一些东西,但它不起作用。当我运行该程序时,它只显示那里的三个子面板,但没有我绘制的“paintComponent()”方法。

我把我的代码粘贴到这里,有人可以帮我检查一下问题是什么吗?非常感谢。

public class PanelDrawTest extends JFrame {
    private JPanel mainPanel;
    private JPanel panel1;
    private JPanel panel2;
    private JPanel panel3;

    public PanelDrawTest(){
       getContentPane().add(mainPanel);
       setPanel1(new MyPanel1());
    }

    public JPanel getMainPanel() {
       return mainPanel;
    }

    public JPanel getPanel1() {
       return panel1;
    }

    public void setPanel1(JPanel panel1) {
       this.panel1 = panel1;

    }

    private class MyPanel1 extends JPanel {

       public MyPanel1(){

       }
       @Override
       public void paintComponent(Graphics g){
           g.drawString("This is Panel 1",20,20);
           g.drawRect(0,200,100,200);

       }
    }

    public static void main(String args[]){
        SwingUtilities.invokeLater(new Runnable() {
           @Override
           public void run() {
               createAndShowGUI();
           }
        });
    }

    private static void createAndShowGUI() {
        PanelDrawTest frame = new PanelDrawTest();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setBounds(50, 50, 1200, 700);
        frame.setPreferredSize(new Dimension(1200,800));
        frame.pack();
        frame.setVisible(true);
    }

 }

最佳答案

注意:发布的代码会抛出 NullPointerException,因为 mainPanel 从未初始化。

构造函数不会将自定义面板添加到布局中,这就是它看不到的原因。 尝试一下,您将看到您的绘图:

public PanelDrawTest() {
   mainPanel = new JPanel();
   getContentPane().add(mainPanel,BorderLayout.NORTH);
   panel1 = new MyPanel1();
   getContentPane().add(panel1,BorderLayout.CENTER);      
}

关于java - 如何在.form创建的子面板上绘图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17698850/

相关文章:

java - GridLayout 以及行数和列数

java - 如何在netbeans gui编辑器中将JPanel分配给JFrame?

java - 滑动拼图Java Shuffle问题

java - JPanel 填满整个 JScrollPane

java - 如何从命令行构建这个 gradle 项目(KotlinParcelize)(Ubuntu 18.04,失败 : Wrong plugin option format)?

java - Android 通知播放一次声音

Java 接口(interface) - 致命缺陷

java - 在不扩展 JTree 的情况下,是否可以在更改树中的对象后强制更新模型?

java - 创建表时 JFrame 中的组件不出现

java - 我在从类调用代码时遇到问题