[英]is it possible to have multiple JOptionPane dialogs?
有誰知道我們如何在另一個JOptionPane對話框上面有一個JOptionPane對話框?
我會使用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);
}
}
編輯:@Hovercraft全鰻魚提供更好的解決方案; OP更有可能尋找什么。
來自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;
}
}
你試過它並遇到了一些問題,或者你只是在問? JOptionPane是模態的,因此它會阻塞它創建的線程。你可以生成幾個顯示多個JOptionPanes的線程:
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();
}
但只有一個消息對話框才能接收回轉事件。 你必須按它們出現的順序關閉它們(這是隨機的)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.