【问题标题】:Why does my JButton appear the full size of the JFrame?为什么我的 JButton 显示为 JFrame 的全尺寸?
【发布时间】:2014-03-01 21:52:19
【问题描述】:

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

我试着开始,我用 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);  
}

【问题讨论】:

    标签: java swing jframe jbutton layout-manager


    【解决方案1】:

    首先将布局添加到 JFrame。例如FlowLayout:

    jfrm.setLayout(new FlowLayout());
    

    【讨论】:

      【解决方案2】:

      “我试着开始,我用Java写了这段代码,由于某种原因,按钮是框架的大小......全屏!我该如何解决它?”

      按钮伸展的原因是因为JFrame 有一个默认的BorderLayout,它不尊重子组件的首选大小。

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

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          您必须使用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。

          谢谢...

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-09-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-06-24
            相关资源
            最近更新 更多