[英]My class inheriting JLabel won't show up but if I change the type to JLabel it does
好的,所以我开设了一个名为Tile的课程。 此类扩展了JLabel。
public Tile()
{
super();
}
应该和JLabel一样,不是吗? 但是当我尝试在代码中使用它时,它不会显示在正确的位置。 如果我调用Tile的边界,它会提供我期望的结果,但它不在该位置。 http://puu.sh/58eUg.jpg和使用的图块,如果我在调用Tile的地方使用了JLabel,则使用http://puu.sh/58eVT.png 。
Container cPane = getContentPane();
for(int x = 0;x<8;x++)
{
for(int y = 0;y<8;y++)
{
grid[x][y] = new Tile();
grid[x][y].setBorder(BorderFactory.createLineBorder(Color.black));
grid[x][y].setBounds(50*x,50*y,100,100);
getContentPane().add(grid[x][y]);
cPane.add(grid[x][y]);
}
}
任何帮助,将不胜感激。
啊哈,我对您的问题的评论是正确的-
让我猜测:您已经重写了getX()和getY()方法,却没有意识到您的方法是重写方法,也许吗? ...
实际上,您正在重写getX()
和getY()
。 这些方法是布局管理器和GUI用于设置组件位置的JComponent的关键方法。 如果被覆盖,您的组件在GUI上的行为将被完全弄乱。
除非必要,否则这就是避免扩展诸如组件之类的复杂类的原因之一。 优先考虑组成而不是继承。
例如,您可以创建一个小的工厂方法来创建tile / JLabel,并且可以使用包含GUI所有智能的非GUI模型类来支持该组件。 例如,Conway的《生活游戏》,其中存在一个逻辑网格LifeSquares以及一个单独的GUI,它仅是逻辑网格的“视图”,并且具有传递用户交互之类的连线,例如鼠标按下一个“控件”类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.