沒有人知道我們如何在另一個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. 在Java中,您是否可以將多個對話框壓縮爲一個對話框
- 3. Android:我可以顯示多個對話框嗎?有沒有像對話Z級?
- 4. 是否有可能在Facebook Feed對話框中有多個附件?
- 5. 在Java中是否有多輸入JOptionPane?
- 6. JOptionPane showMessageDialog方法是否自動實例化此對話框所需的對象
- 7. 用一句話打印多個JOptionPane字符串輸入對話框
- 8. JQuery對話框可以打開另一個JQuery對話框嗎?
- 9. 多個對話框
- 10. 是否可以有多個iAds實例?
- 11. 是否可以有多個appveyor.yml配置?
- 12. 是否有可能沒有按鈕的Grails UI對話框
- 13. 檢測是否有對話框打開
- 14. 是否有WPF的顏色對話框?
- 15. 是否可以測試選擇框中有多少個選項?
- 16. jquery ui對話框,有多個對話框影響位置
- 17. 是否可以使用IntelliJ插件啓動.fxml(對話框)?
- 18. 是否可以從數據庫填充列表對話框?
- 19. 是否可以在Service [android app]中顯示對話框?
- 20. 是否可以將PDF嵌入到jQuery UI對話框中?
- 21. 是否可以抑制Extendscript中的CheckOut/CheckIn對話框?
- 22. 是否可以將CMFCToolBar添加到對話框中?
- 23. 是否可以更換系統打開文件對話框?
- 24. dijit對話框是否可以在模塊創建時關閉
- 25. 是否可以從BrodcastReceiver啓動警報對話框?
- 26. 是否可以在wix中添加卸載對話框?
- 27. 是否可以動態更改模態對話框的語言?
- 28. 是否可以在觸摸UI對話框中包含文件?
- 29. 是否可以使用JavaScript生成保存文件對話框?
- 30. 是否可以動態更改Rich-Faces對話框的大小?
你剛剛建議...是的,你做了;-)有趣的方式來完成一些可能是OP所尋找的東西。 – Howard 2011-05-21 19:38:56
真的很瘋狂,奇怪... +1 – mKorbel 2011-05-21 20:35:26
這是很酷的,btw它爲什麼會起作用?不是所有的對話都是模態的? – Pacerier 2011-05-23 01:50:38