Java 为什么在添加actionListener时,我的按钮会从borderlayout中消失?
我正在为我的java项目编写后端代码,该项目正在实现一个健身记录器。出于某种原因,当我将actionListener函数放在边框布局中的按钮上时,按钮消失了 我尝试在构造函数的不同位置设置函数Java 为什么在添加actionListener时,我的按钮会从borderlayout中消失?,java,swing,jpanel,layout-manager,border-layout,Java,Swing,Jpanel,Layout Manager,Border Layout,我正在为我的java项目编写后端代码,该项目正在实现一个健身记录器。出于某种原因,当我将actionListener函数放在边框布局中的按钮上时,按钮消失了 我尝试在构造函数的不同位置设置函数 public class Buttons extends JFrame implements ActionListener { JFrame frame = new JFrame("Menu"); JPanel MyPanel= new JPanel(); JBut
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
,除非它是大写常量
),并一致使用它李>
import
语句即可成为MRE/SSCCE。MyPanel.add(b3,“东”)代码>东东
- 这是有常数的。例如,
BorderLayout.EAST
。始终使用常量进行编译时检查
- 但是
BorderLayout.LINE\u END
对区域设置敏感。它将出现在RHS上,表示从左到右的语言,左侧表示从右到左的语言李>
JFrame
的引用。保留后者,抛弃前者java
(语言)和swing
(GUI工具包)标记!我看到这一点的唯一原因是我(非常)检查了jframe
标记的问题列表!据我记忆所及,这是我第一次检查标签的问题列表。更具讽刺意味的是,它没有列出我认为与这个问题最相关的5个标签frame.getContentPane().add(..
可以缩短为frame.add(..
)frame.setSize(500115);
最好是frame.pack();
,因为500 x 115只不过是一个猜测,对于不同的操作系统将是“错误的”(内容窗格的大小将因每个系统不同的框架装饰而改变)MyPanel.add(b1, "North");
BorderLayout
最多可容纳五个组件,每个组件位于单独的布局约束中。如果一个组件在不同区域添加两次,它将面临两个问题:
更一般的提示:
EachWordUpperCaseClass
,firstWordLowerCaseMethod()
,firstWordLowerCaseAttribute
,除非它是大写常量
),并一致使用它import
语句即可成为MRE/SSCCE。MyPanel.add(b3,“东”);
reEast
- 这有一些常量。例如,
。始终使用这些常量进行编译时检查BorderLayout.EAST
- 但是,
对区域设置很敏感。对于从左到右的语言,它会显示在RHS上,对于从右到左的语言,它会显示在左侧BorderLayout.LINE\u END
JFrame
的引用。保留后者,抛弃前者java
(语言)和swing
(GUI工具包)标记!我看到这一点的唯一原因是因为检查了jframe
标签的问题列表!据我记忆所及,这是我第一次检查该标签的问题列表。更具讽刺意味的是,它没有列出我认为与这个问题最相关的5个标签列表frame.getContentPane().add(..
可以缩短为frame.add(..
)frame.setSize(500115);
最好是frame.pack();
,因为500 x 115只不过是一个猜测,对于不同的操作系统将是“错误的”(内容窗格的大小将因每个系统不同的框架装饰而改变)