繁体   English   中英

当向其添加actionListener时,为什么我的按钮从我的borderlayout中消失了?

[英]Why does my button disappear from my borderlayout when I add an actionListener to it?

我正在为实现健身记录器的Java项目编写后端代码。 出于某种原因,当我将动作监听器函数放到“边框布局”中的按钮上时,该按钮消失了。

我尝试在构造函数的不同位置设置函数。

public class Buttons extends JFrame implements ActionListener {

      JFrame frame = new JFrame("Menu");
      JPanel MyPanel= new JPanel();

      JButton b1= new JButton("Daily Logger");
      JButton b2= new JButton("View Weekly Logs");
      JButton b3= new JButton("Weight Calculator");
      JButton b4= new JButton("BMI Calculator");
      JButton b5= new JButton("Log Out");

      public Buttons(){
        MyPanel.setLayout(new BorderLayout());
        MyPanel.add(b1, "North");
        MyPanel.add(b2, "Center");
        MyPanel.add(b3, "East");
        MyPanel.add(b4, "West");
        MyPanel.add(b5, "South");

        b1.addActionListener(this);
        add(b1);

        frame.getContentPane().add(MyPanel, "North");
        frame.setSize(500,115);
        frame.setVisible(true);
      }

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


      @Override
      public void actionPerformed(ActionEvent e) {
          String command = e.getActionCommand();

          if(command.equals("Daily Logger"))
              myMethod();
      }

      public void myMethod() {
          JOptionPane.showMessageDialog(this,"Onto the next step");
      }
}

我希望当我添加actionListener函数时,该按钮会显示在边框布局中,但它会消失。 如果按钮确实可以正常工作,则应实现myMethod()函数。 我的主要目标是显示我在另一个类中创建的JTable,以在按下按钮时显示它。

add(b1);

应该删除。 该代码已经通过以下方式添加了它:

MyPanel.add(b1, "North");

BorderLayout最多可容纳五个组件,每个组件位于单独的布局约束中。 如果在不同区域中两次添加组件,则将面临两个问题:

  1. 组件只能出现在一个地方。
  2. 组件“覆盖”添加到布局该区域的原始组件。

更一般的提示:

  1. 请学习通用的Java命名法(命名约定,例如EachWordUpperCaseClassfirstWordLowerCaseMethod()firstWordLowerCaseAttribute除非它是UPPER_CASE_CONSTANT )并一致使用。
  2. 为了尽快获得更好的帮助,请添加一个最小的可复制示例简短,自包含的正确示例 注意:发布的代码仅需要适当的import语句即可成为MRE / SSCCE。
  3. MyPanel.add(b3, "East"); East
    • 为此有常数。 EG BorderLayout.EAST 始终使用常量进行编译时检查。
    • 但是BorderLayout.LINE_END对语言环境敏感。 它将在RHS中显示从左到右的语言,从左到右到左的语言。
  4. 所有Swing和AWT GUI都应在EDT(事件调度线程)上创建和更新。
  5. 该代码既扩展又保留对JFrame的引用。 保留后者,放弃前者。
  6. 确保将java (语言)和swing (GUI工具包)标记添加到问题中! 我看到这的唯一原因是因为我(非常)检查了jframe标签的问题清单! 据我的记忆中,这是我曾经检查了标签的问题,上市的第一次。 更具有讽刺意味的是,它没有列出我认为与该问题最相关的5个标签。
  7. 从Java 1.5开始, frame.getContentPane().add(..可以缩写为frame.add(..
  8. frame.setSize(500,115); 最好是frame.pack(); ,因为500 x 115并不比猜测更好,并且对于不同的OS来说将是“错误的”(内容窗格的大小将因每个系统的框架装饰不同而发生变化)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM