2014-08-30 59 views
2

我試圖添加我的jPanel到jDialog,當我觸發按鈕什麼也沒有發生。爲什麼?我有下面的代碼: 公共類fontFormat {jDialog沒有顯示

public void fontPanel(){ 

    JPanel panel = new JPanel(); 
    panel.setLayout(new FlowLayout()); 

    panel.getPreferredSize(); 
    Dimension size = new Dimension(); 

    size.width = 400; 
    size.height = 600; 

    panel.setPreferredSize(size); 

    panel.add(new JLabel("label")); 
    panel.add(new JButton("button")); 


    JDialog fontDialog = new JDialog(); 

    fontDialog.add(fontDialog); 
} 
} 
+0

您需要一個監聽器添加到'JButton'。 – 2014-08-30 13:45:41

回答

3

這裏:

JDialog fontDialog = new JDialog(); 
fontDialog.add(fontDialog); 

你似乎是想你的JDialog添加到自身,這應該引起你的代碼無法正常工作。雖然此代碼可能會編譯,但運行此方法應該會導致JVM在fontDialog.add(fontDialog);行上拋出IllegalArgumentException

請注意,您展示類似的JDialog你如何表現一個JFrame:

  • 當你打電話給你的JDialog的構造函數,你會想在父窗口進去傳遞,特別是如果你的願望是顯示一個模態對話框。
  • 您還需要將正確的ModalityType枚舉傳遞給構造函數。
  • 你給你的JDialog內容,通常是一個帶有你的組件的JPanel。
  • 你收拾它
  • ,那麼你就可以叫setVisible(true),它應該顯示

例如,

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 13:55:47

+0

@SiminaAlin:不客氣。 – 2014-08-30 13:57:33