我是java GUI编程的新手。 我创建了一个JFrame
。 在这个JFrame
里面,我创建了一个JPanel
。 在这JPanel
里面我创建了另一个JPanel
(让我们称之为“A”)。JFrame中看不到JPanel中的子JPanel
我在“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相同吗? - 请考虑发布重现问题的[mcve]。 –