Har*_*Joy 7 java swing window smack
我有2个延伸课程JFrame
.两者都有show()
构造函数中的方法.从ClassOne
我打电话ClassTwo
像new ClassTwo()
按钮单击事件.但如果我再次按下按钮,ClassTwo
则会打开新窗口.那么如果打开一个ClassTwo窗口,怎么能停止打开ClassTwo窗口呢?
编辑
现在这个问题已经解决,但现在当我第一次打开ClassTwo窗口时,它会显示一个窗口.然后关闭它后,当我再次打开ClassTwo窗口时,它打开两个窗口,这个计数继续增加.为什么会这样?
编辑2
我发现它不是摆动问题,而是来自MultickreChat类Samck API的问题.因此,任何曾经研究过它的人都会帮助我.
ClassOne中的代码是:
if(!winList.contains(room_jid)){
new ClassTwo(room_jid,....);
winList.add(room_jid);
}
Run Code Online (Sandbox Code Playgroud)
而在ClassTwo中:
public ClassTwo(....){
......
this.muc = new MultiUserChat(connection, room_jid);
if(!muc.isJoined())
muc.join(this.user_id); //---- This line opens previously closed window.
.....
if(!isVisible())
show();
}
Run Code Online (Sandbox Code Playgroud)
编辑3
classone的构造函数
public ClassOne(){
JButton btn = new JButton("Open");
btn.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if(!winList.contains(room_jid)){
new ClassTwo(room_jid,....);
winList.add(room_jid);
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
它不起作用的原因是您正在按钮处理程序中创建 ClassTwo 的新实例,这意味着每次按下按钮时都会创建一个新窗口。这应该有效:
private Map<JButton, ClassTwo> classTwoMap;
public ClassOne(){
classTwoMap = new HashMap<JButton, ClassTwo>();
ClassTwo bn1window = new ClassTwo();
bn1window .setVisible(false);
//initialisation code for your window
.....
JButton btn = new JButton("Open");
btn.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
classTwoMap.Get(e.getSource()).setVisible(true);
}
});
classTwoMap.Get(btn).setvisible(false);
}
//Edit:
public ClassTwo() {
// This will hide the window when closed, and the button will re-"open" it.
setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
}
Run Code Online (Sandbox Code Playgroud)
您可以在按钮处理程序中使用其他答案的任意组合,例如切换功能或其他复杂的想法,例如单例。但最重要的是,您应该注意在按钮处理程序中创建一个新窗口,但在仅被调用一次的地方创建它。
编辑多个窗口和按钮。
归档时间: |
|
查看次数: |
1678 次 |
最近记录: |