问题描述
我试图创建一个GUI,发现了java.awt.Component的某些奇怪行为。我想通过外部事件来setVisible(true)
/ setVisible(false)
一个java.awt.Component。但这仅在首先要切换的组件已经可见时才起作用。附件中,我提供了我的问题的最小副本。
package test;
import java.awt.Button;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public final class Test {
public static void main(String[] args) {
Button testButton = new Button("Test Button");
testButton.setVisible(false); /* Removing this line makes the code to work as intended,but why? */
Frame mainFrame = new Frame("Test");
mainFrame.setMinimumSize(new Dimension(640,480));
mainFrame.setVisible(true);
mainFrame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent event) {
System.exit(0);
}
});
mainFrame.add(testButton);
mainFrame.setMenuBar(new MenuBar());
mainFrame.getMenuBar().add(new Menu("Test"));
mainFrame.getMenuBar().getMenu(0).add(new MenuItem("Show/Hide \"Test Button\""));
mainFrame.getMenuBar().getMenu(0).getItem(0).addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
if(testButton.isVisible()) testButton.setVisible(false);
else testButton.setVisible(true);
System.out.println("testButton.getBounds()" + testButton.getBounds()); /* EDIT: Added this line for debugging. */
System.out.println("testButton.isVisible() " + testButton.isVisible());
}
});
}
}
当您删除行testButton.setVisible(false);
时,testButton是可见的,并且也可以在可见状态下切换,否则就不可见。有人知道为什么吗?也许布局管理器不适用于不可见的组件?
编辑:看来布局管理器不setBounds(...)
用于不可见的组件,但是为什么呢?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)