我在一个框架的中间有一个带有一堆标签的面板。内部的一些标签在面板内部看不到它们的位置。
这是一个更好看的表示(蓝色边框是面板;里面的绿色框是看到的标签,而红色框不是)
for(int x = 0 ; x < 8 < x++){
for(int y = 0; y < 11 < y++){
Cell block = new Cell(); //Cell is a class that extends jlabel
//code for setting block location here
blockArray[x][y] = block;
blockArray[x][y].setVisible(true);
this.add(blockArray[x][y]);
}
}
如何确定标签(以我的名义)是绿色还是红色?因为我的目标是将绿色设置为setVisible(true),而将红色设置为setVisible(false)。
我尝试使用isShowing和isDisplayable,但两者都返回false,通过用这样的东西替换setVisible(boolean)行...
if(block[x][y].isShowing()) block[x][y].setVisible(true);
else{block[x][y].setVisible(false)}
Cell对象在其构造函数中有一个setVisible(false),非常确定它不影响我的目标,因为我在实例化它们之后将它们设置为true,但我可能错了。
答案 0 :(得分:1)
如果它们具有标准尺寸,您可以计算哪些标签是可见的,哪些不可见(如果您的框架可以调整大小,您可以随时使用JFrame.getSize()获取其尺寸。如果标签因尺寸不同而出于任何原因,请使用JLabel .getSize()和JLabel.getLocation()来计算框架上是否显示标签。
答案 1 :(得分:0)
总有办法。 事先知道,每当用户对您的窗口执行某些操作时,屏幕上每个可见的方法paint()都会被调用,我们可以使用此知识覆盖此方法并保存组件的状态。
JPanel panel = new JPanel(){
@Override
public void paint(Graphics g){
saveAndResetLabelsState();
super.paint(g);
}
};
JLabel label1 = new JLabel("first"){
@Override
public void paint(Graphics g){
label1Visible = true;
super.paint(g);
}
};
JLabel label2 = new JLabel("second"){
@Override
public void paint(Graphics g){
label2Visible = true;
super.paint(g);
}
};
//later on...
private static void saveAndResetLabelsState()
{
label1SavedVisible = label1Visible;
label2SavedVisible = label2Visible;
label1Visible = false;
label2Visible = false;
}