gpt4 book ai didi

java - JFrame 按钮逻辑错误

转载 作者:行者123 更新时间:2023-11-29 07:55:38 25 4
gpt4 key购买 nike

我一直在花一些时间重新学习 java,这里出现了一个特殊的逻辑错误。

import javax.swing.*;
import java.awt.*;

class Frame
{
public static void main (String args[])
{

JFrame frame = new JFrame("Tester Frame");
frame.setSize(400, 500);

JButton btn1 = new JButton("FOO");
btn1.setSize(150, 50);
btn1.setLocation(45, 0);

JButton btn2 = new JButton("BAR");
btn2.setSize(150, 50);
btn2.setLocation(205, 0);

Container content = frame.getContentPane();
content.setBackground(Color.blue);
content.add(btn1);
content.add(btn2);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}//end main
}

我创建了 2 个 JButton 对象,它们应该大小相同,但位置和文本不同。这当然不是这样,“FOO”按钮正是我想要的位置和方式,但“BAR”按钮是整个框架的大小。

帮助!

最佳答案

1) 您正在尝试通过 setSizesetLocation 等使用 Absolute LayoutManager,但没有调用 setLayout(null) 在要添加 JButton 的组件上。 然而,这不是 Swing 中的最佳实践

添加到 JFrame contentpane 时,默认布局为 BorderLayout添加组件的默认位置是 BorderLayout.CENTER .

阅读 A Visual Guide to Layout Managers

2) 此外,当使用正确的 LayoutManager 时,您将省略 JFrame#setSize(..) 调用并将其替换为 JFrame#pack()在设置 JFrame 可见之前。

3) 也可以阅读 Concurrency in Swing具体在 The Event Dispatch Thread它指示所有 swing 组件都通过 SwingUtilities.invokeXXX(..) block 在 EDT 上创建:

SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
//create and manipulate swing components here
}
});

4) 还可以使用 JFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 因为即使 JFrame 已被处理,这也将允许任何其他线程计时器等继续执行.

关于java - JFrame 按钮逻辑错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17953919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com