我想在由 .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/