2012-07-18 145 views
0

我在java中創建了一個對話框,其中包含一些基本控件,我想知道如何將所有對話框的控件和字體大小更改爲雙精度,如果參數BIG_DIALOG被通過爲真實。增加所有控件的大小和字體大小

希望得到有關如何提前完成這一

感謝

+1

你可以顯示創建對話框的代碼嗎? – Kostronor 2012-07-18 12:01:42

+0

只在該對話框或整個應用程序中?無論如何,它不支持核心 - 對於想法,看看JGoodies Looks和內部使用的FontPolicy/FontSet,不確定是否有每窗口支持可用但可能添加(從未嘗試過,爲什麼你想擁有一個單一的對話框脫穎而出?) – kleopatra 2012-07-18 13:16:42

+0

只是在這個對話框... – Killercode 2012-07-18 14:29:19

回答

3

如果你認真對待這樣做只爲對話框(&不影響在GUI中任何其他成分)的一些準則,你會需要遞歸走在組件層次的內容窗格中陳述(你coukd開始走高,但讓我們使這個容易)

protected void changeContent(Container parent) { 
    for (Component comp : parent.getComponents()) { 
     adjustFont(comp); 
     if (comp instanceof Container) { 
      changeContent((Container)comp); 
     } 
    } 
} 

protected void changeFont(Component comp) { 
    AffineTransformation at = AffineTransformation.getScaleInstance(2, 2); 
    Font font = comp.getFont().deriveFont(at); 
    comp.setFont(font); 
} 

public MyDialog() { 
    changeContent(getConentPane()); 
} 

當然,你應該能夠填補參數requireme對於構造NTS &它的邏輯

UPDATE

首先道歉,我輸入的原代碼了對我的iPad沒有自動完成的好處,所以AffineTransformation應該是AffineTransform

我把這個在一起並獲得真棒效果。我可以保留這個想法用於我自己的代碼,謝謝!

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package test; 

import java.awt.Component; 
import java.awt.Container; 
import java.awt.Font; 
import java.awt.geom.AffineTransform; 

/** 
* 
* @author swhitehead 
*/
public class TestFrame extends javax.swing.JFrame { 

    private float scale = 1f; 

    /** 
    * Creates new form TestFrame  
    */ 
public TestFrame() { 
    initComponents(); 
} 

/** 
* This method is called from within the constructor to initialize the form. 
* WARNING: Do NOT modify this code. The content of this method is always 
* regenerated by the Form Editor. 
*/ 
@SuppressWarnings("unchecked") 
// <editor-fold defaultstate="collapsed" desc="Generated Code"> 
private void initComponents() { 
    java.awt.GridBagConstraints gridBagConstraints; 

    jLabel1 = new javax.swing.JLabel(); 
    jTextField1 = new javax.swing.JTextField(); 
    jScrollPane1 = new javax.swing.JScrollPane(); 
    jList1 = new javax.swing.JList(); 
    jPanel1 = new javax.swing.JPanel(); 
    btnUp = new javax.swing.JButton(); 
    btnDown = new javax.swing.JButton(); 

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 
    getContentPane().setLayout(new java.awt.GridBagLayout()); 

    jLabel1.setText("Hello world!"); 
    getContentPane().add(jLabel1, new java.awt.GridBagConstraints()); 

    jTextField1.setColumns(12); 
    jTextField1.setText("Say something"); 
    gridBagConstraints = new java.awt.GridBagConstraints(); 
    gridBagConstraints.gridx = 0; 
    gridBagConstraints.gridy = 1; 
    gridBagConstraints.anchor = java.awt.GridBagConstraints.PAGE_START; 
    getContentPane().add(jTextField1, gridBagConstraints); 

    jList1.setModel(new javax.swing.AbstractListModel() { 
     String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" }; 
     public int getSize() { return strings.length; } 
     public Object getElementAt(int i) { return strings[i]; } 
    }); 
    jScrollPane1.setViewportView(jList1); 

    gridBagConstraints = new java.awt.GridBagConstraints(); 
    gridBagConstraints.gridx = 1; 
    gridBagConstraints.gridy = 0; 
    gridBagConstraints.gridheight = 2; 
    gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 
    getContentPane().add(jScrollPane1, gridBagConstraints); 

    jPanel1.setLayout(new java.awt.GridBagLayout()); 

    btnUp.setText("Up"); 
    btnUp.addActionListener(new java.awt.event.ActionListener() { 
     public void actionPerformed(java.awt.event.ActionEvent evt) { 
      btnUpActionPerformed(evt); 
     } 
    }); 
    gridBagConstraints = new java.awt.GridBagConstraints(); 
    gridBagConstraints.gridx = 0; 
    gridBagConstraints.gridy = 3; 
    jPanel1.add(btnUp, gridBagConstraints); 

    btnDown.setText("Down"); 
    btnDown.addActionListener(new java.awt.event.ActionListener() { 
     public void actionPerformed(java.awt.event.ActionEvent evt) { 
      btnDownActionPerformed(evt); 
     } 
    }); 
    gridBagConstraints = new java.awt.GridBagConstraints(); 
    gridBagConstraints.gridx = 1; 
    gridBagConstraints.gridy = 3; 
    jPanel1.add(btnDown, gridBagConstraints); 

    gridBagConstraints = new java.awt.GridBagConstraints(); 
    gridBagConstraints.gridx = 0; 
    gridBagConstraints.gridy = 2; 
    gridBagConstraints.gridwidth = 2; 
    getContentPane().add(jPanel1, gridBagConstraints); 

    pack(); 
}// </editor-fold> 

private void btnUpActionPerformed(java.awt.event.ActionEvent evt) { 

    scale += 0.1; 
    changeContent(getContentPane()); 

    invalidate(); 
    repaint(); 

} 

private void btnDownActionPerformed(java.awt.event.ActionEvent evt) { 

    scale -= 0.1; 
    if(scale <= 0) scale = 0.1f; 

    changeContent(getContentPane()); 

    invalidate(); 
    repaint(); 

} 

/** 
* @param args the command line arguments 
*/ 
public static void main(String args[]) { 
    /* 
    * Set the Nimbus look and feel 
    */ 
    //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> 
    /* 
    * If Nimbus (introduced in Java SE 6) is not available, stay with the 
    * default look and feel. For details see 
    * http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
    */ 
    try { 
     for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { 
      if ("Nimbus".equals(info.getName())) { 
       javax.swing.UIManager.setLookAndFeel(info.getClassName()); 
       break; 
      } 
     } 
    } catch (ClassNotFoundException ex) { 
     java.util.logging.Logger.getLogger(TestFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (InstantiationException ex) { 
     java.util.logging.Logger.getLogger(TestFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (IllegalAccessException ex) { 
     java.util.logging.Logger.getLogger(TestFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
     java.util.logging.Logger.getLogger(TestFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } 
    //</editor-fold> 

    /* 
    * Create and display the form 
    */ 
    java.awt.EventQueue.invokeLater(new Runnable() { 

     public void run() { 
      new TestFrame().setVisible(true); 
     } 
    }); 
} 
// Variables declaration - do not modify 
private javax.swing.JButton btnDown; 
private javax.swing.JButton btnUp; 
private javax.swing.JLabel jLabel1; 
private javax.swing.JList jList1; 
private javax.swing.JPanel jPanel1; 
private javax.swing.JScrollPane jScrollPane1; 
private javax.swing.JTextField jTextField1; 
// End of variables declaration 

protected void changeContent(Container parent) { 
    for (Component comp : parent.getComponents()) { 
     adjustFont(comp); 
     if (comp instanceof Container) { 
      changeContent((Container) comp); 
     } 
    } 
} 

protected void adjustFont(Component comp) { 
    AffineTransform at = AffineTransform.getScaleInstance(scale, scale); 
    Font font = comp.getFont(); 
    System.out.println("Font.orignal = " + font.getSize()); 
    font = font.deriveFont(at); 
    System.out.println("Font.scaled = " + font.getSize()); 
    comp.setFont(font); 
} 
} 

我做的一件事情是注意到Font.original和Font.scaled的輸出是相同的。轉換髮生在繪畫階段,不會影響基線字體,只是它的繪製矩陣

+0

怪異的....我實現它...它通過組件,但沒有大小變化正在發生:( – Killercode 2012-07-18 15:50:03

+0

嘗試添加invalidate/repaint後該電話?我沒有測試代碼,並會看看,當我得到一個電腦前 – MadProgrammer 2012-07-18 19:57:36

+0

解決不是因爲無效...只是添加了一些調整:D – Killercode 2012-07-19 15:51:58

0

您可以嘗試"large"sizeVariant,就像它們顯示here一樣。