为什么我的JButton会出现JFrame的完整大小?

时间:2014-02-05 12:45:37

标签: java swing jframe jbutton layout-manager

我是新手,我有一个问题。我正在尝试使用Eclipse编写一个Java窗口应用程序,其中我将有一个主窗口,它将包含几个东西,比如仪表板类的东西,它将有按钮,例如将记录添加到数据库,按下此按钮,将在顶部打开一个新的相关窗口。

我试着开始,我用Java编写了这段代码,出于某种原因,按钮的大小与框架一样......全屏!我该如何解决?

你能否为我提出比我指定的设计更好的想法?

谢谢

public class MainClass {

public static void main(String[] args) {
    // TODO Auto-generated method stub

    JFrame  jfrm = new JFrame("Frame1");
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    jfrm.setSize(screenSize.width, screenSize.height);
    jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JLabel jlab = new JLabel("Hello");
    jfrm.add(jlab);

    JButton button = new JButton("Button");
    button.setSize(new Dimension(50, 50));
    button.setLocation(500, 350);
    jfrm.getContentPane().add(button);

    jfrm.setVisible(true);  
}

4 个答案:

答案 0 :(得分:3)

首先向JFrame添加布局。例如FlowLayout

jfrm.setLayout(new FlowLayout());

答案 1 :(得分:3)

  

“我试着开始,我用Java编写了这段代码,出于某种原因,按钮的大小与帧一样......全屏!我该如何解决?”

按钮拉伸的原因是因为JFrame的默认BorderLayout不符合子组件的首选大小。

解决方案是将布局管理器设置为 尊重首选大小的布局。来自this example的图像显示最常见的布局管理器,并直观地显示哪一个尊重子组件的首选大小。

此外,BorderLayout也是JLabel未展示的原因。默认情况下,添加到BorderLayout而没有指定位置的每个组件,例如BorderLayout.SOUTH会自动置于BorderLayout.CENTER位置。每个职位可能只有一个部分。因此,当您添加JLabel时,它会转到CENTER,但是当您添加JButton时,它也会转到CENTER,从而推出JLabel

如果您从未遇到布局管理器,这可能会让您感到困惑。你应该花时间过去How to Layout Components Within a Container

enter image description here

答案 2 :(得分:0)

您必须使用Layout manager

使用此代码..

 public static void main(String[] args) 
{

JFrame  jfrm = new JFrame("Frame1");
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
jfrm.setSize(screenSize.width, screenSize.height);
jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel jlab = new JLabel("Hello");
jfrm.add(jlab);

JButton button = new JButton("Button");
button.setSize(new Dimension(50, 50));
button.setLocation(500, 350);
jfrm.add(button);
jfrm.setVisible(true);  
jfrm.setLayout(new FlowLayout());
jfrm.pack();

您忘了添加pack()。所以使用这段代码并排获得Jlabel和JButtion。

...谢谢

答案 3 :(得分:0)

您需要使用某种形式的布局管理器,您可以使用以下信息:http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html