如何判断一个组件是否可见?
How to determine if a component can be seen?
我有一个面板,在框架的中间有一堆标签。里面的一些标签在面板内部看不到它们的位置。
这里有一个更好看的表示(蓝色边框是面板;其中的绿色框是可见的标签,而红色的不是)
标签在这样的 for 循环中实例化...
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,但两者 returns 都为假,方法是用类似这样的内容替换 setVisible(boolean) 行...
if(block[x][y].isShowing()) block[x][y].setVisible(true);
else{block[x][y].setVisible(false)}
Cell 对象在其构造函数中有一个 setVisible(false),很确定它不会影响我的目标,因为我在实例化它们后将它们设置为 true,但我可能错了。
如果它们有标准尺寸,您可以计算出哪些标签可见,哪些不可见(如果您的框架是可调整大小的,您始终可以使用 JFrame.getSize() 获得它的尺寸。如果标签的尺寸因任何原因而变化原因,使用 JLabel.getSize() 和 JLabel.getLocation() 来计算标签是否显示在框架上。
总会有办法的。
事先知道,每次用户对您的 window 执行某些操作时,屏幕上每个可见组件的方法 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;
}
我有一个面板,在框架的中间有一堆标签。里面的一些标签在面板内部看不到它们的位置。
这里有一个更好看的表示(蓝色边框是面板;其中的绿色框是可见的标签,而红色的不是)
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,但两者 returns 都为假,方法是用类似这样的内容替换 setVisible(boolean) 行...
if(block[x][y].isShowing()) block[x][y].setVisible(true);
else{block[x][y].setVisible(false)}
Cell 对象在其构造函数中有一个 setVisible(false),很确定它不会影响我的目标,因为我在实例化它们后将它们设置为 true,但我可能错了。
如果它们有标准尺寸,您可以计算出哪些标签可见,哪些不可见(如果您的框架是可调整大小的,您始终可以使用 JFrame.getSize() 获得它的尺寸。如果标签的尺寸因任何原因而变化原因,使用 JLabel.getSize() 和 JLabel.getLocation() 来计算标签是否显示在框架上。
总会有办法的。 事先知道,每次用户对您的 window 执行某些操作时,屏幕上每个可见组件的方法 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;
}