我刚开始学习 Java 中的图形用户界面。我现在能够在扩展 JFrame 的同时创建具有特定大小的窗口。但是,我从这里开始阅读帖子,最好不要扩展 JFrame。然后我尝试通过在 JPanel 中设置大小来创建一个窗口,但是 setSize 似乎不起作用(我的代码一定缺少某些东西)
这是我的框架代码
import javax.swing.JFrame;
public class MyFrame{
private JFrame mainFrame;
private MyPanel mainPanel;
public MyFrame(){
mainFrame = new JFrame();
mainPanel = new MyPanel(50, 50);
mainFrame.add(mainPanel);
mainFrame.setVisible(true);
}
}
这是我的面板代码
import javax.swing.JPanel;
public class MyPanel extends JPanel{
public MyPanel(int i, int j){
setSize(i, j);
}
}
我尝试在我的 Frame 类中添加 frame.pack() ,因为我认为没有设置大小的框架太小以至于看不到面板 - 我错了
我的代码缺少什么?
最佳答案
what's lacking in my code?
初学者自定义组件(面板
)的首选尺寸。 @Override getPreferredSize()
返回一个逻辑值。
然后 pack()
框架以确保它是显示面板和任何其他组件所需的最小尺寸。
所以,像这样:
import javax.swing.*;
public class Application {
private JFrame frame;
private CustomPanel panel;
public Application() {
frame = new JFrame();
// next 2 lines, just a good idea
frame.setLocationByPlatform(true);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
// at 50x50, the title bar on Windows is wider!
panel = new CustomPanel(200, 200);
frame.add(panel);
// make the frame smallest it can be and still show components
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
new Application();
}
};
SwingUtilities.invokeLater(r);
}
}
class CustomPanel extends JPanel {
public CustomPanel(int w, int h) {
setPreferredSize(new java.awt.Dimension(w, h));
}
}
关于java - 如何在不扩展 JFrame 的情况下设置窗口大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33100147/