Java 从一个单独的班级开始一个JPanel(初学者)
我尝试在一个单独的类中构建jpanel,分别调用它们并在其上添加不同的项。你能告诉我我做错了什么吗 MyFrame.javaJava 从一个单独的班级开始一个JPanel(初学者),java,swing,jframe,jpanel,Java,Swing,Jframe,Jpanel,我尝试在一个单独的类中构建jpanel,分别调用它们并在其上添加不同的项。你能告诉我我做错了什么吗 MyFrame.java import javax.swing.*; import java.awt.*; public class MyFrame extends JFrame { public static void main(String[] args) { MyFrame frame = new MyFrame(); frame.setVisi
import javax.swing.*;
import java.awt.*;
public class MyFrame extends JFrame {
public static void main(String[] args) {
MyFrame frame = new MyFrame();
frame.setVisible(true);
}
public MyFrame() {
setTitle("MyFrame");
setSize(300, 200);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
MyPanel panel = new MyPanel();
JButton testButton = new JButton("Test");
panel.add(testButton);
}
}
MyPanel.java
import javax.swing.*;
import java.awt.*;
class MyPanel extends JPanel {
public MyPanel() {
this.setOpaque(true);
this.setVisible(true);
}
}
您没有将面板变量添加到JFrame的contentPane中 加: 作为旁注:
public MyPanel() {
this.setOpaque(true);
this.setVisible(true);
}
默认情况下,jpanel是不透明和可见的,因此MyPanel构造函数中的方法调用没有任何用处
旁注2:我很少扩展JFrame或任何其他顶级窗口,除非我被迫使用其中一个,因为我很少改变窗口的固有行为。我认为最好在需要时创建顶级窗口,即JFrames
旁注3:始终努力在Swing事件线程上启动Swing GUI。我也是
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
MyFrame frame = new MyFrame();
frame.setVisible(true);
}
});
}
编辑
你问:
您编写了“让我们避免设置大小…”。。你能告诉我如何包装它,但要设定最小的框架尺寸吗
我喜欢重写JPanel的getPreferredSize方法,并让它返回一个有意义的维度
例如,您可以这样做,以确保GUI的大小至少为PREF_W by PREF_H:
import java.awt.Dimension;
import javax.swing.*;
public class ShowGetPreferredSize extends JPanel {
private static final int PREF_W = 400;
private static final int PREF_H = PREF_W;
@Override
public Dimension getPreferredSize() {
Dimension superSize = super.getPreferredSize();
if (isPreferredSizeSet()) {
return superSize;
}
int w = Math.max(superSize.width, PREF_W);
int h = Math.max(superSize.height, PREF_H);
return new Dimension(w, h);
}
private static void createAndShowGui() {
JFrame frame = new JFrame("ShowGetPreferredSize");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(new ShowGetPreferredSize());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
您没有将面板变量添加到JFrame的contentPane中 加: 作为旁注:
public MyPanel() {
this.setOpaque(true);
this.setVisible(true);
}
默认情况下,jpanel是不透明和可见的,因此MyPanel构造函数中的方法调用没有任何用处
旁注2:我很少扩展JFrame或任何其他顶级窗口,除非我被迫使用其中一个,因为我很少改变窗口的固有行为。我认为最好在需要时创建顶级窗口,即JFrames
旁注3:始终努力在Swing事件线程上启动Swing GUI。我也是
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
MyFrame frame = new MyFrame();
frame.setVisible(true);
}
});
}
编辑
你问:
您编写了“让我们避免设置大小…”。。你能告诉我如何包装它,但要设定最小的框架尺寸吗
我喜欢重写JPanel的getPreferredSize方法,并让它返回一个有意义的维度
例如,您可以这样做,以确保GUI的大小至少为PREF_W by PREF_H:
import java.awt.Dimension;
import javax.swing.*;
public class ShowGetPreferredSize extends JPanel {
private static final int PREF_W = 400;
private static final int PREF_H = PREF_W;
@Override
public Dimension getPreferredSize() {
Dimension superSize = super.getPreferredSize();
if (isPreferredSizeSet()) {
return superSize;
}
int w = Math.max(superSize.width, PREF_W);
int h = Math.max(superSize.height, PREF_H);
return new Dimension(w, h);
}
private static void createAndShowGui() {
JFrame frame = new JFrame("ShowGetPreferredSize");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(new ShowGetPreferredSize());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
非常感谢。哑错误^^您编写的让我们避免设置大小。。你能告诉我如何包装,但要设定最小的框架尺寸吗?谢谢。哑错误^^您编写的让我们避免设置大小。。你能告诉我如何包装它,但要设定最小的框架尺寸吗?