2013-03-05 44 views
0

我想知道是否可以創建一個Java類,它允許在Java框架中設置所有JTextField的高度,而不是手動更改。調整許多JTextField的高度

+0

您可以使用反射 – Rakesh 2013-03-05 09:28:23

+0

只是強調@Madprogrammer - *從來沒有*做任何手動調整大小/定位,這是LayoutManager – kleopatra 2013-03-05 10:17:10

+0

的可能重複[如何設置Java中的文本字段的高度和寬度?]的獨佔任務。 (http://stackoverflow.com/questions/14805124/how-to-set-the-height-and-the-width-of-a-textfield-in-java) – 2013-03-05 10:40:33

回答

2

這取決於佈局的結構。

基本上你需要走框架的組成部分hierarcy(和它的容器)找我要指出的JTextField

import java.awt.BorderLayout; 
import java.awt.Component; 
import java.awt.Container; 
import java.awt.EventQueue; 
import java.util.ArrayList; 
import java.util.List; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class WalkComponentTree { 

    public static void main(String[] args) { 
     new WalkComponentTree(); 
    } 

    public WalkComponentTree() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException ex) { 
       } catch (InstantiationException ex) { 
       } catch (IllegalAccessException ex) { 
       } catch (UnsupportedLookAndFeelException ex) { 
       } 

       JFrame frame = new JFrame("Test"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setLayout(new BorderLayout()); 
       frame.add(new TestPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 

       List<JTextField> fields = getTextFields(frame.getContentPane()); 
      } 

     }); 
    } 

    public List<JTextField> getTextFields(Container container) { 
     List<JTextField> fields = new ArrayList<JTextField>(25); 
     for (Component comp : container.getComponents()) { 
      if (comp instanceof JTextField) { 
       fields.add((JTextField)comp); 
      } else if (comp instanceof Container) { 
       fields.addAll(getTextFields((Container)comp)); 
      } 
     } 
     return fields; 
    } 

    public class TestPane extends JPanel { 
     public TestPane() { 
      add(new JTextField()); 
     } 
    } 
} 

的情況下,任何組件的尺寸這樣的修改可能是一個顯著壞理念。除了可能有(多個)佈局管理員參與的事實,它將顯着改變UI的當前外觀並且可能導致更多問題,然後它是值得的(例如,這將拾取可編輯的組合框;))

+0

+1不錯的一個:) – 2013-03-05 10:03:24