为什么 JButton 不显示在 JFrame 上?
Why aren't the JButtons displayed on the JFrame?
当我 运行 程序 window 及其所有属性都正确时,但按钮不会显示,知道我做错了什么吗?
我有两个 类 window 和 TimeTable0:
这是window:
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("");
});
}
}
这是 TimeTable0:
package timetable0;
public class TimeTable0 {
public static void main(String[] args) {
window menu = new window();
menu.ventana();
menu.actions();
}
}
您需要初始化按钮并将 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 对象,而没有为其他对象创建 JButton 对象。
您也忘记了将 JPanel 添加到 JFrame 中。
add(panel); //Add panel to frame
您没有将 JPanel
添加到框架中。
panel.add(bt1);
panel.add(bt2);
panel.add(bt3);
panel.add(bt4);
setContentPane(panel);
你不是 运行 Event Dispatch Thread 上的程序:
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();
如果您真的想将 class 扩展到 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);
}
}
通常我更愿意将 class 扩展到 JPanel,而不是将其扩展到 JFrame。之后在 main() 中创建一个 JFrame 并将您自定义的 JPanel 添加到其中。
一个一个初始化按钮:
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);
当我 运行 程序 window 及其所有属性都正确时,但按钮不会显示,知道我做错了什么吗?
我有两个 类 window 和 TimeTable0:
这是window:
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("");
});
}
}
这是 TimeTable0:
package timetable0;
public class TimeTable0 {
public static void main(String[] args) {
window menu = new window();
menu.ventana();
menu.actions();
}
}
您需要初始化按钮并将 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 对象,而没有为其他对象创建 JButton 对象。
您也忘记了将 JPanel 添加到 JFrame 中。
add(panel); //Add panel to frame
您没有将
JPanel
添加到框架中。panel.add(bt1); panel.add(bt2); panel.add(bt3); panel.add(bt4); setContentPane(panel);
你不是 运行 Event Dispatch Thread 上的程序:
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();
如果您真的想将 class 扩展到 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);
}
}
通常我更愿意将 class 扩展到 JPanel,而不是将其扩展到 JFrame。之后在 main() 中创建一个 JFrame 并将您自定义的 JPanel 添加到其中。
一个一个初始化按钮:
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);