为什么我不能在此代码中使用setLocation定位JButton?

时间:2016-02-25 04:13:48

标签: java swing jbutton layout-manager

我很新,还有很多东西需要学习。非常感谢那些花时间帮助我的人。我已经尝试了各种不同的方法来将我的按钮定位在框架的特定坐标处,但由于某种原因,没有任何适用于放置JButton的常用语句。有什么建议吗?

这是我目前的工作代码

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

class GUI extends JFrame
{

JButton b1; // Declares Swing button variable and gives identifier (b1)
JButton b2;  // Declares Swing label variable and gives identifier (l1)

public GUI()
{
setTitle("Virus Explortation");
setSize(400,400);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);

setLayout(new BorderLayout());
setContentPane(new JLabel(new ImageIcon("C:\\Pictures\\matrix.gif")));
setLayout(new FlowLayout());
b1=new JButton("I am a button");
add(b1);

b2=new JButton("I am also a button");
add(b2);

setSize(399,399);
setSize(400,400);


}
public static void main(String args[])
{
new GUI();
}
}

1 个答案:

答案 0 :(得分:2)

  

为什么我不能在此代码中使用setLocation定位JButton?

这是因为Java swing中的所有容器都有默认布局。您正在将按钮直接添加到JFrame中,我在框架中使用BorderLayout看到您。 (BorderLayout也是JFrame的默认布局)。

使用布局时,布局管理器将决定添加的组件的位置(有时是尺寸)。这意味着您手动设置位置的尝试可能会徒劳无功。

如果要将组件的位置设置为您想要的位置,则必须将容器的布局(例如JFrame或JPanel)设置为null

JPanel pnlMain = new JPanel();
pnlMain.setLayout(null);

将其设置为null后,您必须为添加到容器的每个组件设置位置。如果没有,它将不会出现。您可以使用setBounds方法设置大小和位置:

JButton btn = new JButton();
btn.setBounds(x, y, width, height);

但是,出于多种原因,将布局设置为null 不推荐 。其中一个最突出的原因是您失去了对UI在不同系统上的呈现方式以及用户的不同使用方式的控制和可预测性。

建议不要从JFrame延伸,而是从JPanel这样的容器扩展。然后将容器添加到框架中。您很少需要制作自定义JFrame