我做了一個JComboBox
當它的其中一個項目被選中時,它啓動了一個JFrame
。不允許同一個JFrame被打開兩次或更多
但如果再次選擇相同的項目,即使JFrame
已啓動,它將再次啓動。
我該如何去允許它只能在同一時間打開一次。
謝謝:)
我做了一個JComboBox
當它的其中一個項目被選中時,它啓動了一個JFrame
。不允許同一個JFrame被打開兩次或更多
但如果再次選擇相同的項目,即使JFrame
已啓動,它將再次啓動。
我該如何去允許它只能在同一時間打開一次。
謝謝:)
我認爲你需要使用自定義JDialogs,而不是JFrame的,這將不允許從另一個窗口或對話框的用戶輸入。有關更多信息和源代碼,請參閱Oracle website。
您也可以在一個類中,這將持有事件創建的JFrame的情況下使用一個靜態的JFrame變量,但其編碼的不是好辦法。
//global jframe variable
class Globals{
public static myFrame myFrameOpenedInstance=null;
}
// By invoking the event method returns same instance
method duringEventOccured()
{
if(Globals.myFrameOpenedInstance==null){
myFrame newFrameInstance=new myFrame();
Globals.myFrameOpenedInstance=newFrameInstance;
newFrameInstance.setVisible(true);
}
else{
myFrame newFrameInstance=Globals.myFrameOpenedInstance;
newFrameInstance.setVisible(true);
}
}
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Tester extends JFrame {
boolean i = true;
public Tester() {
setVisible(true);
pack();
JComboBox box = new JComboBox();
box.addItem("One");
box.addItem("Two");
box.addItem("Three");
box.addItem("Four");
box.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
if (i) {
final JFrame s = new JFrame();
s.setVisible(true);
s.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent windowEvent) {
i = true;
s.setEnabled(false);
}
});
}
else {
System.out.print("\n alredy opende");
}
i = false;
}
});
getContentPane().add(box);
}
public static void main(String[] args) {
Tester tester = new Tester();
}
}
這裏面是例如對您有所幫助。我們添加Windows監聽器,也布爾變量來識別窗口已經打開沒有演示例子。
顯示您的代碼。設置一個標誌/布爾值或檢查'JFrame'是否已經可見。 – Brandon
謝謝!我添加了一個條件,如果它不可見以允許它被打開,否則它會顯示一個錯誤。 :) – Boolena