java - 如何在不扩展 JFrame 的情况下设置窗口大小?

标签 java swing user-interface

我刚开始学习 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/

相关文章:

java - 如何用星号替换Java字符串中的所有字符

java - JEdi​​torPane HTML 渲染

java - 通过文本文件按特定顺序将 JMenuItems 从 ReGex 结果添加到 JMenu

android - AutoLayout对处理iOS屏幕大小的 fragment 有用吗?为什么Android中没有等效的工具?

linux - 即使我更改了 grub,也无法加载到启动到文本模式/控制台/命令行

math - 滚动位移超调 - 数学问题

java - 基于字符串加载图片

java - 返回从外部函数的内部回调中获得的字符串

java - JComponent.revalidate() 在代码完成之前不会更新

JAVA:代码中为空JSON,浏览器中填充JSON