Java - 为什么我的按钮没有显示在面板中?
Java - Why doesn't my buttons show in the panel?
我正在努力学习 Java Swing
。现在,我正在制作一个简单的程序,我需要制作一个按钮。我有两个 类:一号木和挥杆。
我创建了按钮并导入 javax.swing.JButton
并添加了按钮。最后,按钮添加到面板,但不知道为什么我只得到面板?
任何人都可以帮助我吗?这是我的代码:
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Swing extends JFrame {
private JFrame f;
private JButton button;
private JLabel label;
private JPanel panel;
public Swing() {
}
public Swing(String titleName) {
creatButton();
creatFrame(titleName);
}
public void creatButton() {
JButton btn = new JButton("click me");
JPanel panel = new JPanel();
panel.add(btn);
btn.setBounds(50, 100, 95, 30);
add(panel);
}
private void creatFrame(String title) {
JFrame f = new JFrame(title);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
f.setSize(400, 500);
f.setLayout(null);
}
}
public class Driver {
public static void main (String [] args) {
new Swing ("calculator");
}
}
creatFrame
正在创建一个不同于框架本身的新 JFrame(您的 Swing class 扩展了 JFrame)。
删除行:
JFrame f = new JFrame(title);
并通过 this
而不是 f
调用方法。
好的,让我们开始...
JButton btn = new JButton("click me");
JPanel panel = new JPanel();
panel.add(btn);
btn.setBounds(50, 100, 95, 30);
add(panel);
你:
- 创建按钮
- 创建面板
- 您将按钮添加到面板
- 您将面板添加到框架中
然后...
JFrame f = new JFrame("calculator");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new
f.setVisible(true);
您创建了一个全新的 JFrame
实例并展示了它,但它没有任何内容?! !
相反,您应该避免从 JFrame
扩展,并可能使用 JPanel
代替,例如...
public class Swing extends JPanel {
private JButton button;
private JLabel label;
public Swing() {
creatButton();
add(button);
}
public void creatButton() {
JButton btn = new JButton("click me");
}
}
然后你可以创建一个window(或其他容器)并将其添加到其中
JFrame f = new JFrame(title);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new Swing());
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
作为一般规则,JFrame
是一个非常糟糕的扩展点,它是一个复杂的复合组件,并将您锁定在一个单一的用例中。通常,从 JPanel
开始是一个更好的主意,它可以为您提供更大的灵活性和更少的复杂性,并且易于重用。
你真的、真的、真的需要避免 null
布局
我正在努力学习 Java Swing
。现在,我正在制作一个简单的程序,我需要制作一个按钮。我有两个 类:一号木和挥杆。
我创建了按钮并导入 javax.swing.JButton
并添加了按钮。最后,按钮添加到面板,但不知道为什么我只得到面板?
任何人都可以帮助我吗?这是我的代码:
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Swing extends JFrame {
private JFrame f;
private JButton button;
private JLabel label;
private JPanel panel;
public Swing() {
}
public Swing(String titleName) {
creatButton();
creatFrame(titleName);
}
public void creatButton() {
JButton btn = new JButton("click me");
JPanel panel = new JPanel();
panel.add(btn);
btn.setBounds(50, 100, 95, 30);
add(panel);
}
private void creatFrame(String title) {
JFrame f = new JFrame(title);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
f.setSize(400, 500);
f.setLayout(null);
}
}
public class Driver {
public static void main (String [] args) {
new Swing ("calculator");
}
}
creatFrame
正在创建一个不同于框架本身的新 JFrame(您的 Swing class 扩展了 JFrame)。
删除行:
JFrame f = new JFrame(title);
并通过 this
而不是 f
调用方法。
好的,让我们开始...
JButton btn = new JButton("click me");
JPanel panel = new JPanel();
panel.add(btn);
btn.setBounds(50, 100, 95, 30);
add(panel);
你:
- 创建按钮
- 创建面板
- 您将按钮添加到面板
- 您将面板添加到框架中
然后...
JFrame f = new JFrame("calculator");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new
f.setVisible(true);
您创建了一个全新的 JFrame
实例并展示了它,但它没有任何内容?! !
相反,您应该避免从 JFrame
扩展,并可能使用 JPanel
代替,例如...
public class Swing extends JPanel {
private JButton button;
private JLabel label;
public Swing() {
creatButton();
add(button);
}
public void creatButton() {
JButton btn = new JButton("click me");
}
}
然后你可以创建一个window(或其他容器)并将其添加到其中
JFrame f = new JFrame(title);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new Swing());
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
作为一般规则,JFrame
是一个非常糟糕的扩展点,它是一个复杂的复合组件,并将您锁定在一个单一的用例中。通常,从 JPanel
开始是一个更好的主意,它可以为您提供更大的灵活性和更少的复杂性,并且易于重用。
你真的、真的、真的需要避免 null
布局