有谁知道我们如何在另一个JOptionPane对话框上面有一个JOptionPane对话框?
答案 0 :(得分:7)
我会使用JDialogs,因为我认为这可以让您更好地控制代码的运行和显示方式。但它也可以通过JOptionPanes来完成。例如,如果您在JOptionPane中显示了一个JButton,其ActionListener导致显示另一个JOptionPane。
例如,
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class NestedJOptions {
public static void main(String[] args) {
final JPanel panel = new JPanel();
panel.add(new JButton(new AbstractAction("Push Me") {
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(panel, "hello world!");
}
}));
JOptionPane.showMessageDialog(null, panel);
}
}
答案 1 :(得分:2)
来自JOptionPane javadocs:
所有对话都是模态的。每 showXxxDialog方法阻止调用者 直到用户的互动为止 完整。
所以,不,你将无法使用JOptionPane
实现所需的功能。但JOptionPane
是一个便利类,可以创建很少见的JDialog
。由于JOptionPane
不直接支持您想要的功能,因此您应该考虑使用JDialog
直接实现它。例如:
public class DialogTest {
static final SimpleDateFormat SDF = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss");
public static void main(String[] args) {
final JFrame frame = new JFrame("Dialog test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(createPanelToPopDialog(frame));
frame.setSize(500, 200);
frame.show();
}
static JPanel createPanelToPopDialog(final JFrame parent) {
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
JButton button = new JButton("Pop a Dialog");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JDialog dialog = new JDialog(parent, true);
dialog.add(createPanelToPopDialog(parent));
dialog.setSize(500, 200);
dialog.show();
}
});
panel.add(button, BorderLayout.SOUTH);
panel.add(new JLabel("Created at " + SDF.format(new Date())));
panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
return panel;
}
}
答案 2 :(得分:-1)
for (int i = 0; i < 5; i++) {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
JOptionPane.showMessageDialog(null, "I'm thread " + Thread.currentThread().getId());
}
});
t.start();
}
但只有一个消息对话框能够接收回转事件。你必须按它们出现的顺序关闭它们(这是随机的)。