Java 模态设置为Dialog.ModalityType.MODELESS的JDialog:optionPane.getValue()不再工作
我有一个应用程序,我需要在一个框架上工作,同时我想打开一个对话框 因此,我将模态设置为Java 模态设置为Dialog.ModalityType.MODELESS的JDialog:optionPane.getValue()不再工作,java,swing,jframe,jdialog,modality,Java,Swing,Jframe,Jdialog,Modality,我有一个应用程序,我需要在一个框架上工作,同时我想打开一个对话框 因此,我将模态设置为Dialog.ModalityType.MODELESS。虽然这使我能够与父JFrame交互,但我不能再在对话框上使用getValue() 下面是一个正在运行的示例: package Test; import java.awt.Dimension; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLa
Dialog.ModalityType.MODELESS
。虽然这使我能够与父JFrame交互,但我不能再在对话框上使用getValue()
下面是一个正在运行的示例:
package Test;
import java.awt.Dimension;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
public class TestModalityDialog {
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame frame = new JFrame();
frame.setPreferredSize(new Dimension(800,600));
frame.setVisible(true);
frame.pack();
JOptionPane optionPane = new JOptionPane();
String[] options = new String[]{"Hello"};
JLabel label1 = new JLabel(
"Click on a cluster to delete it (needs to be confirmed by pressing the 'Confirm' button.");
JLabel label2 = new JLabel(
"Press 'p' to undelete an unconfirmed deletion.");
Object complexMsg[] = { label1, label2 };
optionPane.setMessage(complexMsg);
optionPane.setOptions(options);
optionPane.setMessageType(JOptionPane.PLAIN_MESSAGE);
JDialog dialog = optionPane.createDialog(frame,
"Select undesired clusters");
//dialog.setModalityType(Dialog.ModalityType.MODELESS); //uncomment this line out
dialog.setVisible(true);
dialog.setVisible(false);//must be set to false for Modality to work
dialog.setVisible(true);
Object obj = optionPane.getValue();
int result = -1;
for (int k = 0; k < options.length; k++) {
if (options[k].equals(obj)) {
result = k;
}
}
if (result == 0) {
System.out.println("Succesful");
}
}
}
这将允许“交互”(不是在这个最小的ofc示例中),但我不再得到一个系统
我没有想到的第二件事是,在未注释的版本中,您必须按两次按钮才能工作
对于帮助,我会很高兴,已经尝试了其他3种模式价值观,但都不起作用
干杯,
Buddha可以使用
PropertyChangeEvent
来完成与无模式对话框的通信,该事件可以是现有的,也可以是您自己的,也可以是现有的。请参见所示的示例和。谢谢,Propertylistener就像一个符咒:)
//dialog.setModalityType(Dialog.ModalityType.MODELESS);