使JLabel适合其父JPanel或给它一个最小尺寸

时间:2014-01-03 02:42:41

标签: java swing jlabel

我有一个由jPanel组成的gridlayout。每个JPanel包含一个JLabel,它们是9x9。因为这是一个象棋游戏,我需要能够在某些事件(例如可能的移动选项或濒危场)上突出显示每个jPanel或其jLabel。但是,我只能突出显示设置了图标(图形)的字段,这意味着空的jLabel可能没有维度。

这就是我在jLabel(it sucks中放置一个数字的方法,但它有点奏效):

public void drawFigureAt(Figure fg, int x, int y) {
    //retrieve the Jlabel from the field array
    JLabel pole = policka_l[y*8+x];
    //Set icon from file
    pole.setIcon(new ImageIcon(fg.imageName()+(fg.color==1?"_white":"_black")+".png"));
    //force redraw or whatever it is
    pole.revalidate();
}

现在有些字段以非常透明的黑色突出显示,所以我可以看到JLabels和它们的图标一样大。
这是我强调的方式:

public void highlightField(int x, int y, Color color) {
    //Get the JLabel obejct
    JLabel pole = policka_l[y*8+x];
    //Set the color as the background
    pole.setBackground(color);
    //What is this?
    pole.setOpaque(true);
    //Another magic
    pole.revalidate();
    repaint();
}

但是,正如我所说,如果JLabel没有图标,则无法突出显示,这对我来说非常悲伤。我更糟糕的是,这是一个必须在今天早上工作的学校项目,所以使用不同的渲染系统是没有问题的 我找到了一些如何处理它的线索,然而,它们不起作用。我非常希望:

JLabelinstance.setMinimumSize(new Dimension(70, 70));

不幸的是没有效果。

所以我现在想要的是让上面的功能工作,甚至更好 - 配置JLabel来填充他们的父JPanels,这样突出显示看起来不错,而不是愚蠢。
此外,我的数据根本没有调整窗口大小,所以它们往往会溢出。

1 个答案:

答案 0 :(得分:3)

  

我有一个由jPanels组成的gridlayout。

你可以:

1)只需将标签直接添加到GridLayout即可。然后标签将是网格的大小
2)将面板的布局管理器设置为BorderLayout,然后调整标签大小以填充面板的整个空间。

 pole.setBackground(color);
 pole.setOpaque(true);
 //pole.revalidate();
 //repaint();

不需要revalidate()和repaint()方法。当属性发生变化时,Swing组件将自动重新绘制。

  

此外,我的数据根本没有调整窗口大小,所以它们往往会溢出。

不要使用setSize()。您应该将图标添加到标签,然后标签到网格。然后打包()框架,网格的大小将保持最大的图标。