2014-08-30 37 views
1

/* JDialog是答案* /正如我看到有2種方式來添加額外的窗口,使用JDialog,但在那些你不能把容器。或者將JInternalFrames與特定容器(如JDesktopPane)一起使用,但爲此您必須將接口的其餘部分轉換爲內部框架。添加JInternalFrame-like窗口最簡單的方法是什麼?對底層佈局進行儘可能少的修改?如何在覆蓋樣式中創建內部框架,而無需修改底層界面?

+0

否則我不認爲你的問題具體到足以承擔責任,因爲它有點含糊。修改底層佈局?如果你想得到最快最快的幫助,你會希望我們能夠快速完全理解你的問題,爲此,考慮創建併發佈一個最小化的程序,編譯和運行,並向我們展示了你有什麼樣的通用結構以及你在嘗試什麼做一個[MCVE](http://stackoverflow.com/help/mcve)。 – 2014-08-30 14:14:11

+0

你能告訴我如何獲得JDialog的「contentPane」嗎?我還沒有找到將容器放入它們的選項。你會回答我的問題。 – 2014-08-30 14:18:42

+1

您可以在您的JDialog實例上調用'getContentPane()',就像在JFrame上一樣。 JDialog API會向您顯示JDialog可用的所有方法,我強烈建議您在那裏查看。 – 2014-08-30 14:19:30

回答

3

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(); 
     } 
     } 
    } 
} 
+0

美麗,謝謝你的時間。 – 2014-08-30 14:35:31

相關問題