java不合理的jtextfield大小问题
Posted
技术标签:
【中文标题】java不合理的jtextfield大小问题【英文标题】:java unreasonable jtextfield sizing issue 【发布时间】:2015-02-13 02:33:58 【问题描述】:我已经搜索了所有类似的问题,但我找不到解决方案。
public class FormPanel extends JPanel
private JLabel namelabel;
private JLabel occlabel;
private JTextField nametext;
private JTextField occtext;
private JButton okButton;
public FormPanel()
Dimension dim = getPreferredSize();
dim.width = 250;
setPreferredSize(dim);
namelabel = new JLabel("Name : ");
occlabel = new JLabel("Occupation : ");
nametext = new JTextField();
nametext.setPreferredSize(new Dimension(80,20));
occtext = new JTextField();
occtext.setColumns(20);
okButton = new JButton("OK");
Border inner = BorderFactory.createTitledBorder("Add Person : ");
Border outer = BorderFactory.createEmptyBorder(5,5,5,5);
setBorder(BorderFactory.createCompoundBorder(inner,outer));
setLayout(new GridBagLayout());
GridBagConstraints gc = new GridBagConstraints();
gc.gridx = 0;
gc.gridy = 0;
gc.weightx = 1;
gc.weighty = 1;
gc.fill = GridBagConstraints.NONE;
add(namelabel,gc);
gc.gridx = 1;
gc.gridy = 0;
add(nametext,gc);
gc.gridy = 1;
gc.gridx = 0;
add(occlabel,gc);
gc.gridy = 1;
gc.gridx = 1;
add(occtext,gc);
gc.gridy = 2;
gc.gridx = 1;
add(okButton,gc);
nametext
和 occtext
非常小。
我尝试了 new JTextField(20) 和字符串版本,
我尝试了 setPreferredSize 作为上面的类,
我也尝试了 setColumn 但它们都不起作用。
【问题讨论】:
【参考方案1】:摆脱setPreferredSize(dim);
。通过在顶层 Window 上调用 pack()
让 GUI 自己调整大小,您的问题可能会消失。您将容器的大小限制为可能小于最适合它的大小,并且通过这样做,GridBagLayout 将以一种不好的方式收缩其组件,包括您的 JTextField。
【讨论】:
@VivianMaya:很高兴它有帮助。要查看实际情况,只需使用鼠标在上面的 JPanel 中重新调整 GUI 的大小,然后观察 JTextField 变小,但随后在某个临界大小时,会变得非常小且无法使用。【参考方案2】:如果您使用pack()
,设置dim.height
可能是个好主意。
Dimension dim = getPreferredSize();
dim.width = 500;
dim.height = 200;
setPreferredSize(dim);
namelabel = new JLabel("Name : ");
nametext = new JTextField();
occlabel = new JLabel("Occupation : ");
occtext = new JTextField();
okButton = new JButton("OK");
Border inner = BorderFactory.createTitledBorder("Add Person : ");
Border outer = BorderFactory.createEmptyBorder(5, 5, 5, 5);
setBorder(BorderFactory.createCompoundBorder(inner, outer));
GridBagLayout gl = new GridBagLayout();
GridBagConstraints gc = new GridBagConstraints();
setLayout(gl);
gc.fill = GridBagConstraints.HORIZONTAL;
gc.gridwidth = 1;
add(namelabel, gc);
gc.gridy = 1;
add(occlabel, gc);
gc.gridx = 1;
gc.gridy = 0;
gc.weightx = .5;
add(nametext, gc);
gc.gridy = 1;
add(occtext, gc);
gc.fill = GridBagConstraints.NONE;
gc.anchor = GridBagConstraints.EAST;
gc.gridy = 2;
gc.gridx = 1;
gc.weightx = 0;
gc.insets = new Insets(10,0,0,0);
add(okButton, gc);
【讨论】:
以上是关于java不合理的jtextfield大小问题的主要内容,如果未能解决你的问题,请参考以下文章
Java 摇摆 |最后一个 JTextField 未设置为自定义大小