【发布时间】:2021-11-12 18:48:05
【问题描述】:
在 BoxLayout 中使用 JTextField 时,我遇到了一些非常奇怪的行为。这是产生问题的代码:
public static void main(String[] args) {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(new Dimension(900,500));
f.getContentPanel().setBackground(Color.BLACK);
f.setLayout(new BoxLayout(f.getContentPane(), BoxLayout.PAGE_AXIS));
JLabel boxOne = new JLabel();
boxOne.setBackground(new Color(33,255,240,75));
boxOne.setOpaque(true);
boxOne.setMinimumSize(new Dimension(900,50));
boxOne.setMaximumSize(new Dimension(900,50));
boxOne.setPreferredSize(new Dimension(900,50));
boxOne.setForeground(Color.WHITE);
boxOne.setText("This is the first box.");
JTextField boxTwo = new JTextField();
boxTwo.setBackground(new Color(33,255,240,75));
boxTwo.setOpaque(true);
boxTwo.setMinimumSize(new Dimension(900,50));
boxTwo.setMaximumSize(new Dimension(900,50));
boxTwo.setPreferredSize(new Dimension(900,50));
boxTwo.setForeground(Color.WHITE);
f.add(boxOne);
f.add(boxTwo);
f.setVisible(true);
}
我期望的是一个顶部显示 boxOne 的窗口,然后在其下方显示 boxTwo。这是将 boxTwo 设为 JLabel 而不是 JTextField 时得到的结果。 This looks as desired.
我得到的是 boxOne 垂直分成两部分。 This is definitely not the desired result.
更奇怪的是,当在 boxTwo 中输入文本时,它似乎在同一位置复制了自身。 boxTwo bizarre overlap.
我的目标是让 boxOne 位于顶部,不间断,而 boxTwo 在其下方,能够在没有此处描述的奇怪行为的情况下输入它。我是 Java 新手,所以也许我遗漏了一些明显的东西。
【问题讨论】:
-
1)
new Color(33,255,240,75)Swing 不适用于半透明颜色。 2) 为鼓励人们测试代码,请发帖minimal reproducible example。 -
在布局组件时,避免使用 setMinimumSize、setMaximumSize 和 setPreferredSize。相反,使用您使用的 LayoutManager(BoxLayout、GridLayout 等)中的功能来完成它。
标签: java swing jtextfield