【发布时间】:2011-03-03 00:38:31
【问题描述】:
现在的例子我有一个包含 jtable 显示所有客户信息的主框架,并且有一个创建按钮来打开一个新的 JFrame,允许用户创建新客户。我不希望用户可以打开多个创建框架。任何 Swing 组件或 API 都可以做到这一点?或者如何禁用主框架?像 JDialog 这样的东西。
【问题讨论】:
现在的例子我有一个包含 jtable 显示所有客户信息的主框架,并且有一个创建按钮来打开一个新的 JFrame,允许用户创建新客户。我不希望用户可以打开多个创建框架。任何 Swing 组件或 API 都可以做到这一点?或者如何禁用主框架?像 JDialog 这样的东西。
【问题讨论】:
你可以使用:
private void btn_NewFormActionPerformed(java.awt.event.ActionEvent evt) {
this.hide();
new Frm_NewFormUI().setVisible(true);
}
【讨论】:
很抱歉回答迟了,但您是否考虑过单例设计模式?每当您需要该类时,它将返回该类的相同实例。所以如果用户想要一个框架来输入细节,那么只会打开一个框架(同一个实例)
它是这样的:
private static MySingleFrame instance = null; //global var
private MySingleFrame() { } //private constructor
private static MySingleFrame getInstance()
{
if(instance == null)
{
instance = new MySingleFrame();
}
//returns the same instance everytime MySingleFrame.getInstance() is called
return instance;
}
【讨论】:
我认为当您尝试打开新的 jframe 时,应该将此代码用于主 jframe:
this.setEnabled(false);
【讨论】:
我建议您将新客户对话框设置为模态JDialog,这样您就不允许在应用中的其他对话框/框架可见时进行输入。详情请查看modality tutorial。
【讨论】:
只需在第一帧上使用firstFrame.setVisible(false)。这将使它隐藏..
如果您想要更通用的方法,您可以在某处引用当前显示的帧,并在请求显示新帧时更改它
JFrame currentFrame;
void showRequest(JFrame frame)
{
currentFrame.setVisible(false);
currentFrame = frame;
currentFrame.setVisible(true);
}
【讨论】: