我有一个扩展名为Cell的JComponent的类,它不会显示,并且从不调用它的paintComponent。 以下是我为使其工作而做的事情的简短清单:
this.setPreferredSize
,this.setMaximumSize
和this.setMinimumSize
JPanel
的扩展名)为每个单元格调用this.add(cell)
以及this.validate()
JPanel's
全部致电JPanels
的{{1}}。.validate()
已添加到JPanel
的{{1}},并且contentPane
JFrame
被调用。GUIFrontend.java
JFrame
GTGrid.java
.pack()
Cell.java (此方法非常庞大,因此只添加了选项)
import java.awt.*;
public class GUIFrontend extends JFrame{
private static final long serialVersionUID = -7074700257172600349L;
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
GUIFrontend g = new GUIFrontend();
}
});
}
public GUIFrontend(){
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
JPanel primary = new JPanel();
//Map
JPanel mapContainer = new JPanel();
mapContainer.setMinimumSize(new Dimension(772, 600));
GTGrid gtg = new GTGrid();
gtg.validate();
mapContainer.add(gtg);
mapContainer.validate();
JPanel controls = new JPanel();
controls.setBackground(Color.green);
controls.setPreferredSize(new Dimension(160,600));
primary.add(mapContainer);
primary.add(controls);
primary.validate();
this.validate();
this.getContentPane().add(primary);
this.pack();
this.validate();
this.setVisible(true);
}
}
答案 0 :(得分:1)
向布局管理器添加太多元素是否有问题? (将有150 * 193 = 28,950个组件)
一个布局管理器的硬编码限制为512个组件。不记得它是哪一个。
当您使用GridLayout时,组件都会调整大小以适应可用于整个网格的空间。可能没有足够的空间可用,因此每个单元格的实际大小变为(0,0),在这种情况下,将永远不会在组件上调用paint方法。
答案 1 :(得分:0)
通过从我的Grid类(GTGrid扩展)中删除getWidth()
和getHeight()
方法来解决问题。这些是我很少使用的旧方法,显然它们使得GTGrid不被绘制,因为它们被初始化为零。另外,我不得不删除getWidth()
&来自Cell.java的getHeight()