【发布时间】:2016-08-21 20:32:38
【问题描述】:
我创建了一个JFrame。
在这个JFrame 中,我创建了一个JPanel。
在这个JPanel 中,我创建了另一个JPanel(我们称之为“A”)。
我在“A”中绘制了一个矩形,并希望使用图形创建按钮。
我的 gui 中没有矩形。我可以看到“A”中的paintComponent() 方法没有被调用。
代码:
JPanels:(子 JPanel 是内部类)
public class MemoryPanel extends JPanel {
public MemoryPanel(){
setPreferredSize(new Dimension(350,448));
}
@Override
public void paintComponent(Graphics g) {
//POSITIONING
setLayout(new BorderLayout());
//CREATE MEMORY BUTTONS
MemButton a=new MemButton();
//Drawing Rectangles for Memory
add(a,BorderLayout.CENTER);
}
private class MemoryButton extends JPanel{
public MemoryButton(){
setLayout(null);
setPreferredSize(new Dimension(87,40));
}
@Override
public void paintComponent(Graphics g){
Graphics2D td= (Graphics2D)g;
td.drawRect(0, 0, 20, 20);
}
}
}
【问题讨论】:
-
1)
paintComponent方法应该用于绘制图形,而不是用于创建和添加组件。在构造函数中执行此操作。 2) 如果您将按钮添加到BorderLayout.CENTER,setPreferredSize不会按照您的预期进行。该按钮将占用整个可用空间。 3) 不要忘记在paintComponent方法的开头调用super.paintComponent()。另外,MemButton和MemoryButton一样吗? - 请考虑发布重现问题的minimal reproducible example。
标签: java swing jframe jpanel awt