【问题标题】:JButton not appearing on JFrameJButton 没有出现在 JFrame 上
【发布时间】:2018-04-27 14:57:40
【问题描述】:

以下是 jbutton 未显示在框架上的代码。我也将可见设置为真。即使这样,按钮也不会出现。

class gui{
        public static void main(String args[]){
            layoutBorder lb=new layoutBorder("check");
        }
    }

class layoutBorder extends JFrame{
    layoutBorder(String title){
        super(title);
        setLayout(null);
        setSize(200, 200);
        JButton jb=new JButton("JB");
        add(jb);
        setVisible(true);
    }
}

【问题讨论】:

    标签: java swing user-interface jframe jbutton


    【解决方案1】:

    不要使用空布局!!!

    Swing 旨在与布局管理器一起使用。

    阅读 Swing 教程 o Layout Managers 中的部分以了解更多信息。

    我建议您下载工作示例并使用它们。该示例还将向您展示如何更好地构建代码。也许从How to Use Buttons 的代码开始,它有一个简单的例子,将3 个按钮添加到面板,然后将面板添加到框架。

    此外,类名应以大写字符开头。你有没有在 API 中看到一个没有的类???学习 Java 约定并遵循它们。

    【讨论】:

    • 因为我是 Java 编程新手,所以我错过了这些约定。从现在开始,我将牢记 Java 约定。
    • As I am new to Java programming - 你为什么不接受我的回答?我给你的答案是正确的解决方案。您不应该使用空布局。你不应该猜测组件的大小应该是多少 我给你的教程链接解释了为什么你应该使用布局管理器。但是您也可以阅读有关Doing Without a Layout Manager 的部分。此外,作为编程新手,本教程为您提供了其他基本 Swing 信息的资源,以备下次遇到问题时使用。
    • 我怀疑答案未被接受,因为其他人提供了看似工作副本/可粘贴的代码。真的很丢脸。
    • 布局对我来说似乎很难。最初,我的讲师开始使用这种“空”布局概念进行教学。这就是为什么我要避免它。'
    • @OmarMalik, Initially, my Instructor started teaching with this 'null' layout concept - 这就是问题所在。您学习的是坏习惯,而不是学习如何创建动态灵活的 GUI。
    【解决方案2】:

    camickr 是对的。此外,当应用程序线程需要更新 GUI 时,始终使用 AWT 事件调度线程。

    import javax.swing.*;
    import java.awt.*;
    import java.lang.*;
    
    public class Gui {
        public static void main(String args[]) {
            SwingUtilities.invokeLater(() -> {
                MyFrame frame = new MyFrame("check");
            });
        }
    }
    
    class MyFrame extends JFrame {
        MyFrame(String title){
            super(title);
            setLayout(new BorderLayout());
            setSize(200, 200);
            JButton jb = new JButton("JB");
            add(jb);
            setVisible(true);
        }
    }
    

    【讨论】:

      【解决方案3】:

      如果你想要null 布局,那么你需要自己设置大小和位置。使用setLocationsetSize 方法。

      class gui{
              public static void main(String args[]){
                  layoutBorder lb=new layoutBorder("check");
              }
          }
      
      class layoutBorder extends JFrame{
          layoutBorder(String title){
              super(title);
              setLayout(null);
              setSize(200, 200);
              JButton jb=new JButton("JB");
              jb.setLocation(10, 10);
              jb.setSize(40, 30);
              add(jb);
              setVisible(true);
          }
      }
      

      【讨论】:

      • 这不是解决方案!使用随机数来设置 Swing 组件的大小并不是设计使用的方式。作为初学者,学会正确使用 Swing!
      • (1-) 它是否有效并不重要。这不是 Swing 的设计方式,原因有很多。例如,查看此论坛上的“评论”按钮。请注意按钮的大小如何以适合带有适当边框的文本。大小会随着文本的变化而变化。代码中的数字 40 和 30 是什么意思。它们只是随机数,没有任何意义。如果文本发生变化,那么会发生什么。布局管理器允许您创建易于更改的动态 GUI。该代码仅在非常有限的意义上起作用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-09
      • 2015-01-03
      • 2014-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多