0

代码:

public class launcher implements ActionListener {

private static JFrame window;
private static JPanel panel; 

private JButton createPassword;
private JButton seePassword;

public launcher() {
    
    window = new JFrame(); 
    panel = new JPanel();
    
    window.setTitle("Password Vault");
    window.setSize(400, 260);
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    window.setLocationRelativeTo(null);
    window.setResizable(false);
    window.setVisible(true);
    window.getContentPane().add(panel); // Adds panel to JFrame
    
    createPassword = new JButton("Create Password");
    createPassword.setBounds(20, 100, 150, 100);
    createPassword.addActionListener(this);
    
    seePassword = new JButton("View Password");
    seePassword.setLocation(20, 50);
    seePassword.addActionListener(this);
    
    panel.add(createPassword);
    panel.add(seePassword);
}

public static void main(String[] args) {

    new launcher();
}

为什么我不能更改 JButton 的位置?我已经尝试了 setBounds 和 setLocation 功能,但我的按钮仍然停留在 JFrame 窗口的顶部中间部分。我还尝试在 launcher() 方法中声明我的按钮并将它们声明为静态变量。

4

2 回答 2

1

您不应该尝试设置按钮的大小/位置。

Swing 旨在与布局管理器一起使用。布局管理器将根据布局管理器的规则设置按钮的大小/位置。

JPanel 的默认布局管理器是FlowLayout,这就是您看到按钮居中的原因。

如果您想以不同的方式定位按钮,则需要更改布局管理器。

阅读有关布局管理器的 Swing 教程中的部分以获取更多信息和示例。

看起来您希望按钮垂直显示,因此可以根据您的确切要求使用BoxLayoutor 。GridLayout

您的代码的其他问题:

  1. 类名应以大写字符开头
  2. 不需要使用静态变量。这不是 static 关键字的使用方式
  3. 在框架可见之前,应将组件添加到框架中。
  4. 您应该在调用 setVisible(...) 之前在框架上调用 pack(),以便组件可以以其首选大小显示。
于 2020-08-06T01:26:30.003 回答
-1

虽然您真的不应该在没有布局管理器的情况下更改组件的位置,但有一种方法。如果您将这行代码放入您的代码中,它应该可以使用setBounds

window.setLayout(null);
于 2020-08-06T14:15:26.003 回答