JTextField当我使用ItemListener变量选择复选框时,我已将变量设置为更新文本。虽然文本会更新,但大小不会更新,但只会在我最大化或最小化窗口时更新。你知道为什么会这样吗?这是我的代码:import java.awt.FlowLayout;import java.awt.Font;import java.awt.event.ItemListener;import java.awt.event.ItemEvent;import javax.swing.JFrame;import javax.swing.JCheckBox;import javax.swing.JTextField;class Fruitbox extends JFrame{ private JTextField Atext; private final JCheckBox Abox; private final JCheckBox Bbox; private String currentString; public Fruitbox() { super("Hey you da best"); setLayout(new FlowLayout()); Atext = new JTextField("Fruit"); Abox = new JCheckBox("Apple"); Bbox = new JCheckBox("Banana"); add(Abox); add(Bbox); add(Atext); Trigger t = new Trigger(); Abox.addItemListener(t); Bbox.addItemListener(t); } class Trigger implements ItemListener { @Override public void itemStateChanged(ItemEvent e) { String S = "Fruit"; if(Abox.isSelected() && Bbox.isSelected()) S = "Apple and Banana"; else if(Abox.isSelected()) S = "Apple"; else if(Bbox.isSelected()) S = "Banana"; else S = "Fruit"; Atext.setText(S); } } } class MainFruit { public static void main(String[] args) { Fruitbox Fruit = new Fruitbox(); Fruit.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Fruit.setSize(300,300); Fruit.setVisible(true); } }
1 回答

Qyouu
TA贡献1786条经验 获得超11个赞
您可以通过revalidate()在设置其文本后从您的侦听器中调用包含 JTextField 的容器来更改 JTextField 的大小,因为这会使您的布局管理器重新布局所保留的组件,但总体而言更好的是使 JTextField 更大开始使用可帮助您设置其列的构造函数。即,改变这个:
Atext = new JTextField("Fruit");
对此:
Atext = new JTextField("Fruit", 25); // or some suitable value
或者更好
// avoid "magic" numbers by using constants and variables
Atext = new JTextField("Fruit", COLUMNS); // where COLUMNS is a constant
请注意,按照约定,变量名称应以小写字母开头,并且遵循这些约定,其他人将更容易理解您的代码。
添加回答
举报
0/150
提交
取消