0

手動で変更する代わりに、Java フレーム内のすべての JTextField の高さを設定できる Java クラスを作成できるかどうかを知りたいです。

4

2 に答える 2

2

レイアウトの構造によって異なります。

基本的に、フレーム(およびそのコンテナ)のコンポーネント階層を歩き、次のインスタンスを探す必要があります。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の現在の外観を大幅に変更し、価値があるよりも多くの問題を引き起こす可能性があります(たとえば、これは編集可能なコンボボックスを取得します;))

于 2013-03-05T09:48:43.273 に答える
0

これを実現するためにルック アンド フィールを変更できます。 ルック アンド フィールの変更

于 2013-03-05T09:44:48.057 に答える