1
/* JDialog是答案* /正如我看到有2種方式來添加額外的窗口,使用JDialog,但在那些你不能把容器。或者將JInternalFrames與特定容器(如JDesktopPane)一起使用,但爲此您必須將接口的其餘部分轉換爲內部框架。添加JInternalFrame-like窗口最簡單的方法是什麼?對底層佈局進行儘可能少的修改?如何在覆蓋樣式中創建內部框架,而無需修改底層界面?
/* JDialog是答案* /正如我看到有2種方式來添加額外的窗口,使用JDialog,但在那些你不能把容器。或者將JInternalFrames與特定容器(如JDesktopPane)一起使用,但爲此您必須將接口的其餘部分轉換爲內部框架。添加JInternalFrame-like窗口最簡單的方法是什麼?對底層佈局進行儘可能少的修改?如何在覆蓋樣式中創建內部框架,而無需修改底層界面?
JDialog的contentParame就像JFrames一樣,可以放入JFrame的任何組件都可以放入一個JDialog中。例如:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class DialogEg {
private static void createAndShowGUI() {
MainPanelGen mainPanelGen = new MainPanelGen();
JFrame frame = new JFrame("DialogEg");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(mainPanelGen.getMainPanel());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
class MainPanelGen {
private JPanel mainPanel = new JPanel();
private JTextField field = new JTextField(10);
private JButton btn = new JButton(new BtnActn());
private JDialog dialog;
private DialogPanel dialogPanel = new DialogPanel();
public MainPanelGen() {
mainPanel.add(field);
mainPanel.add(btn);
field.setEditable(false);
field.setFocusable(false);
}
public JPanel getMainPanel() {
return mainPanel;
}
private class BtnActn extends AbstractAction {
BtnActn() {
super("Button");
}
@Override
public void actionPerformed(ActionEvent arg0) {
if (dialog == null) {
Window win = SwingUtilities.getWindowAncestor(mainPanel);
if (win != null) {
dialog = new JDialog(win, "My Dialog",
Dialog.ModalityType.APPLICATION_MODAL);
dialog.getContentPane().add(dialogPanel);
dialog.pack();
dialog.setLocationRelativeTo(null);
}
}
dialog.setVisible(true); // here the modal dialog takes over
System.out.println (dialogPanel.getFieldText());
field.setText(dialogPanel.getFieldText());
}
}
}
class DialogPanel extends JPanel {
private JTextField field = new JTextField(10);
private JButton exitBtn = new JButton(new ExitBtnAxn("Exit"));
public DialogPanel() {
add(field);
add(exitBtn);
}
public String getFieldText() {
return field.getText();
}
private class ExitBtnAxn extends AbstractAction {
public ExitBtnAxn(String name) {
super(name);
}
@Override
public void actionPerformed(ActionEvent arg0) {
Window win = SwingUtilities.getWindowAncestor(DialogPanel.this);
if (win != null) {
win.dispose();
}
}
}
}
美麗,謝謝你的時間。 – 2014-08-30 14:35:31
否則我不認爲你的問題具體到足以承擔責任,因爲它有點含糊。修改底層佈局?如果你想得到最快最快的幫助,你會希望我們能夠快速完全理解你的問題,爲此,考慮創建併發佈一個最小化的程序,編譯和運行,並向我們展示了你有什麼樣的通用結構以及你在嘗試什麼做一個[MCVE](http://stackoverflow.com/help/mcve)。 – 2014-08-30 14:14:11
你能告訴我如何獲得JDialog的「contentPane」嗎?我還沒有找到將容器放入它們的選項。你會回答我的問題。 – 2014-08-30 14:18:42
您可以在您的JDialog實例上調用'getContentPane()',就像在JFrame上一樣。 JDialog API會向您顯示JDialog可用的所有方法,我強烈建議您在那裏查看。 – 2014-08-30 14:19:30