[英]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
最多可容纳五个组件,每个组件位于单独的布局约束中。 如果在不同区域中两次添加组件,则将面临两个问题:
更一般的提示:
EachWordUpperCaseClass
, firstWordLowerCaseMethod()
, firstWordLowerCaseAttribute
除非它是UPPER_CASE_CONSTANT
)并一致使用。 import
语句即可成为MRE / SSCCE。 MyPanel.add(b3, "East");
再East
BorderLayout.EAST
。 始终使用常量进行编译时检查。 BorderLayout.LINE_END
对语言环境敏感。 它将在RHS中显示从左到右的语言,从左到右到左的语言。 JFrame
的引用。 保留后者,放弃前者。 java
(语言)和swing
(GUI工具包)标记添加到问题中! 我看到这的唯一原因是因为我(非常)检查了jframe
标签的问题清单! 据我的记忆中,这是我曾经检查了标签的问题,上市的第一次。 更具有讽刺意味的是,它没有列出我认为与该问题最相关的5个标签。 frame.getContentPane().add(..
可以缩写为frame.add(..
。 frame.setSize(500,115);
最好是frame.pack();
,因为500 x 115并不比猜测更好,并且对于不同的OS来说将是“错误的”(内容窗格的大小将因每个系统的框架装饰不同而发生变化)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.