沒有人知道我們如何在另一個JOptionPane對話框上面有一個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
s。由於您需要的功能不直接受JOptionPane
的支持,因此您應該考慮直接使用JDialog
s來實現它。例如:
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持有的Swing代碼完成。 – 2011-05-21 19:36:39
@ Hovercraft - 同意。我忘記了'JOptionPane'選項,它允許你傳入你自己的'Component'來渲染。 – 2011-05-21 19:56:05
你有沒有試過它,遇到了一些問題,或者你只是問? 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();
}
,但只有一個消息對話框將能夠接收擺動事件。你必須按照它們出現的順序關閉它們(這是隨機的)。
多線程將是一個壞主意,因爲所有的Swing代碼都需要從相同的線程EDT調用,但是這並不是必需的。 – 2011-05-21 19:39:29
向下投票,因爲現在您給出了打破Swing單線程規則的示例代碼,並不好。我建議你刪除這個答案。 – 2011-05-21 19:42:22
@Hovercraft Full Of Eels:我相信Swing在創建新窗口時需要一些額外的安全措施,所以啓動幾個創建對話框的線程就沒問題,因爲只有一個模式窗口會接收到swing事件。必須格外小心,但可以完成。 – 2011-05-21 19:43:00
- 1. joptionpane和確認對話框是是否按鈕
- 2. JOptionPane輸入對話框
- 3. JOptionPane確認對話框
- 4. 是否可以在gVIM中顯示多選對話框?
- 5. 在Java中,您是否可以將多個對話框壓縮爲一個對話框
- 6. Android:我可以顯示多個對話框嗎?有沒有像對話Z級?
- 7. MonoTouch對話框是否可以沒有部分?
- 8. 是否有可能在Facebook Feed對話框中有多個附件?
- 9. 是否可以刪除Android自定義對話框的框架?
- 10. 是否可以打開另一個對話框而不關閉primefaces中的現有對話框?
- 11. 在Java中是否有多輸入JOptionPane?
- 12. JOptionPane showMessageDialog方法是否自動實例化此對話框所需的對象
- 13. JOptionPane輸入對話框菜單
- 14. JOptionPane - 輸入對話框程序
- 15. 用一句話打印多個JOptionPane字符串輸入對話框
- 16. JQuery對話框可以打開另一個JQuery對話框嗎?
- 17. 是否可以有多個py3版本?
- 18. 是否可以有多個iAds實例?
- 19. 是否可以有多個ID?
- 20. 是否可以有多個appveyor.yml配置?
- 21. 是否有可能沒有按鈕的Grails UI對話框
- 22. 多個對話框
- 23. 是否有WPF的顏色對話框?
- 24. 檢測是否有對話框打開
- 25. 是否可以測試選擇框中有多少個選項?
- 26. 從ResultSet中創建一個對象[用於JOptionPane對話框]
- 27. 是否可以將CMFCToolBar添加到對話框中?
- 28. 檢查是否可以安全地解除對話框
- 29. 是否可以更換系統打開文件對話框?
- 30. 是否可以將PDF嵌入到jQuery UI對話框中?
你剛剛建議...是的,你做了;-)有趣的方式來完成一些可能是OP所尋找的東西。 – Howard 2011-05-21 19:38:56
真的很瘋狂,奇怪... +1 – mKorbel 2011-05-21 20:35:26
這是很酷的,btw它爲什麼會起作用?不是所有的對話都是模態的? – Pacerier 2011-05-23 01:50:38