我想知道是否可以创建一个 Java 类,允许设置 Java 框架中所有 JTextField 的高度,而不是手动更改。
问问题
90 次
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 回答