当我运行程序的窗口和它的所有属性都是正确的,但按钮不会显示,任何想法我做错了什么?
我有两个类window和timeable0:
窗口:
package timetable0;
import java.awt.event.ActionEvent;
import javax.swing.*;
public class window extends JFrame {
JButton bt1,bt2,bt3,bt4 = new JButton();
JPanel panel = new JPanel();
public void ventana() {
setResizable(false);
setTitle("Time Table");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400,550);
setVisible(true);
bt1.setText("Show Grades");
bt2.setText("Show Time Table");
bt3.setText("");
bt4.setText("");
panel.add(bt1);
panel.add(bt2);
panel.add(bt3);
panel.add(bt4);
}
public void actions (){
bt1.addActionListener((ActionEvent e) -> {
System.out.println("");
});
bt2.addActionListener((ActionEvent e) -> {
System.out.println("");
});
bt3.addActionListener((ActionEvent e) -> {
System.out.println("");
});
bt4.addActionListener((ActionEvent e) -> {
System.out.println("");
});
}
}
还有timeable0:
package timetable0;
public class TimeTable0 {
public static void main(String[] args) {
window menu = new window();
menu.ventana();
menu.actions();
}
}
-
您没有将
JPanel
添加到帧中。panel.add(bt1); panel.add(bt2); panel.add(bt3); panel.add(bt4); setContentPane(panel);
-
您没有在事件调度线程上运行程序:
public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { window menu = new window(); menu.ventana(); menu.actions(); } }); }
-
您没有创建所有四个按钮:
JButton bt1 = new JButton(); JButton bt2 = new JButton(); JButton bt3 = new JButton(); JButton bt4 = new JButton();
如果你真的想把你的类扩展到JFrame,我就会这样做。
public class Window extends JFrame {
JButton bt1,bt2,bt3,bt4; //Do initialization in the constructor, not here
JPanel panel;
public Window() {
createComponents();
addComponents();
initFrame();
}
private void createComponents(){
panel = new JPanel();
panel.setPreferredSize(new Dimension(800, 600));
bt1 = new JButton("Show Grades");
bt2 = new JButton("Show Time Table");
bt3 = new JButton("btn 3");
bt4 = new JButton("btn 4");
}
private void addComponents(){
panel.add(bt1);
panel.add(bt2);
panel.add(bt3);
panel.add(bt4);
add(panel);
}
private void initFrame(){
setResizable(false);
setTitle("Time Table");
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setLocationRelativeTo(null);
}
}
通常我更喜欢扩展一个类到JPanel,而不是扩展到JFrame。然后在main()中创建一个JFrame,并将您定制的JPanel添加到其中。
您需要初始化按钮并将panel
添加到JFrame中。此外,尝试将setVisible(true)
语句移动到ventana()
方法的末尾,以便在添加组件后显示。
public void Ventana() {
bt1 = new JButton("Show Grades");
bt2 = new JButton("Show Time Table");
bt3 = new JButton();
bt4 = new JButton();
...
panel.add(bt4);
add(panel);
setVisible(true); //moved from top
}
这里没有显示太多代码,但您至少应该尝试这样做:
注意JButton bt1,bt2,bt3,bt4 = new JButton();
与下面的书写方式不同:
JButton bt1 = new JButton();
JButton bt2 = new JButton();
JButton bt3 = new JButton();
JButton bt4 = new JButton();
做JButton bt1,bt2,bt3,bt4 = new JButton();
,你只是为bt4
创建一个JButton对象,而不是其他的。
您还忘记将JPanel添加到JFrame中。
add(panel); //Add panel to frame
逐个初始化按钮:
JButton bt1 = new JButton();
JButton bt2 = new JButton();
JButton bt3 = new JButton();
JButton bt4 = new JButton();
在面板上添加按钮后将面板添加到框架中:
panel.add(bt1);
panel.add(bt2);
panel.add(bt3);
panel.add(bt4);
setContentPane(panel);