2012-06-07 18 views
1

我是Java初學者。我使用下面的代碼在應用程序中隨時顯示彈出窗口。彈出配置寬度,換行和字體

public static int showConfirmDialog(Component parentComponent, 
     Object message, String title, int optionType) 
    { 
     JOptionPane pane = new JOptionPane(message, JOptionPane.QUESTION_MESSAGE, 
      optionType); 
     //pane.setFont(new java.awt.Font("SansSerif", 0, 12));//Not working to change the font of pop-up text and button texts 
     final JDialog dialog = pane.createDialog(parentComponent, title); 
     dialog.setVisible(false) ; 
     //dialog.setFont(new java.awt.Font("SansSerif", 0, 12)); //Not working to change the font of pop-up text and button texts 
     dialog.setLocationRelativeTo(parentComponent); 
     dialog.setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE); 
     dialog.setModal(true); 
     dialog.setVisible(true) ; 
     dialog.dispose(); 
     Object o = pane.getValue(); 
     if (o instanceof Integer) { 
      return (Integer)o; 
     } 
     return JOptionPane.CLOSED_OPTION; 
    } 

的彈出正在正常顯示,但有以下問題:

  1. 如何改變字體彈出文本/消息和按鈕的文字(是/否)?
  2. 如何限制彈出寬度到其父母的寬度?
  3. 如何包裝彈出文本(如將文本包裝在文本區域中)?

更新:(答案1) 獲得來自的JOptionPane組件,並設置字體如下:

private static final String key = "OptionPane.messageFont"; 

//Question: QUESTION_MESSAGE 
public static int showConfirmDialog(Component parentComponent, 
    Object message, String title, int optionType){ 

    UIManager.put(key, new java.awt.Font("SansSerif", 0, 12)); 
    JOptionPane pane = new JOptionPane(message, JOptionPane.QUESTION_MESSAGE, 
     optionType); 
    JPanel buttonPanel = (JPanel)pane.getComponent(1); 
    Object buttonOk[] = buttonPanel.getComponents(); 
     for (int i = 0; i < buttonOk.length; i++) { 
     JButton button = (JButton)buttonOk[i]; 
      button.setFont(new java.awt.Font("SansSerif", 0, 12)); 
      button.validate(); 
     } 

    pane.setFont(new java.awt.Font("SansSerif", 0, 12)); 
    final JDialog dialog = pane.createDialog(parentComponent, title); 
    dialog.setVisible(false) ; 
    dialog.setFont(new java.awt.Font("SansSerif", 0, 12)); 
    dialog.setLocationRelativeTo(parentComponent); 
    dialog.setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE); 
    dialog.setModal(true); 
    dialog.setVisible(true) ; 
    dialog.dispose(); 
    Object o = pane.getValue(); 
    if (o instanceof Integer) { 
     return (Integer)o; 
    } 
    return JOptionPane.CLOSED_OPTION; 
} 

更新2(答案爲第3題):

使用下面這個函數它會自動包裝文字。此函數inturn調用showConfirmDialog(parentComponent, message, title, optionType);該問題已經提供了showConfirmDialog(...)的代碼。

/** 
    * Question/Confirmation Message Dialog Multiline. 
    * It DONOT require linebreak ("\n") for multiline messages. It will automatically wrap the text to new lines. 
    * Note: last when used was not properly working. Please verify it. 
    */ 
    public static int showConfirmDialogMultiLine(Component parentComponent, 
       Object message, String title, int optionType){ 

     JTextArea textArea = new JTextArea((String)message); 

     textArea.setColumns(50); 
     textArea.setLineWrap(true); 
     textArea.setWrapStyleWord(true); 
     textArea.setSize(textArea.getPreferredSize().width, 1); 
     textArea.setBackground(parentComponent.getBackground()); 
     textArea.setFont(Usability.getFont("DialogBoxes.DialogTextFont")); //$NON-NLS-1$ 
     textArea.setEditable(false); 
     message = textArea; 
     int retVal = showConfirmDialog(parentComponent, 
       message, 
       title, 
       optionType); 
     return retVal; 
    } 

不要任何人知道第二個問題的答案?

+1

爲了更快提供更好的幫助,請發佈[SSCCE](http://sscce.org/)。 –

回答

3

您可以使用UIManager更改OptionPane.messageFont,如下所示。

private static final String key = "OptionPane.messageFont"; 
... 
private int showConfirmDialog(...) { 
    UIManager.put(key, UIManager.getFont(key).deriveFont(Font.ITALIC, 20)); 
    JOptionPane pane = new JOptionPane(...); 
    ... 
} 

附錄:哪裏獲得不同的密鑰

UIManager Defaults是一個很好的資源,因爲它可以檢查已安裝的默認屬性Look &感覺實現。

+0

感謝您的回答。使用了我發佈的1個問題的答案。我在哪裏得到不同的OptionPane鍵,像'private static final String key =「OptionPane.messageFont」;' – merlachandra