java - 如何将 Java 窗口(实际上是 JFrame)设置为正确的分辨率?

标签 java jframe window size

我通过修改 Jamal's pong game 在 Java 中进行修改现在我注意到 entire window实际上是 800x600,但这不是我想要的! 我希望框架为800x600,并且周围成为窗口8的精美边框。对我来说,向 Java 请求 800x600 JFrame,然后再获取 794x571 框架来使用是没有意义的!

<小时/>

设置窗口的主要代码:

public Main() {
    // cvars contains variables from JPong.ini (It's an extended class from the ini4j library)
    cvars = CVarList.getInstance();

    // get(sectionName, optionName, classtype, defaultValue)
    setSize(cvars.get("Window", "width", int.class, 800),
            cvars.get("Window", "height", int.class, 600));
    setTitle(cvars.get("Window", "title", String.class, "JPong"));
    setResizable(cvars.get("Window", "resizable", boolean.class, false));
    setVisible(true);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    table = new Table(this);
    add(table);
}
<小时/>

我发现的原因是因为我改变了 Racket / Racket 的速度, Racket / Racket 卡在了窗口的两端,所以修改代码后 Racket 不再粘住了,但现在它们稍微移出了可见框架(因为我在逻辑中使用了0和窗口的高度来停止 Racket / Racket )

现在我想知道有多少 Java 窗口的大小实际上是错误的......

最佳答案

创建一个包含TableJPanel,在其中重写它的getPreferredSize方法并返回您想要的所需大小

public class TableWrapperPanel extends JPanel {
    private Table table;
    public TableWrapperPanel(Table table) {
        setLayout(new BorderLayout());
        this.table = table;
        add(table);
    }

    public Dimension getPreferredSize() {
        cvars = CVarList.getInstance();
        return new Dimension(cvars.get("Window", "width", int.class, 800),
            cvars.get("Window", "height", int.class, 600));
    }
}

现在,在您的 main 方法中,创建 TableWrapperPanel 的实例并将其添加到您的“窗口”中,完成此操作后调用 pack,这会将窗口打包在您的内容周围。

public Main() {
    // cvars contains variables from JPong.ini (It's an extended class from the ini4j library)
    cvars = CVarList.getInstance();

    // get(sectionName, optionName, classtype, defaultValue)
    setSize(cvars.get("Window", "width", int.class, 800),
            cvars.get("Window", "height", int.class, 600));
    setTitle(cvars.get("Window", "title", String.class, "JPong"));
    setResizable(cvars.get("Window", "resizable", boolean.class, false));
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    TableWrapperPanel wrapper = new TableWrapper(table);
    add(wrapper );
    pack();
    setVisible(true);
}

或者,您可以创建一个自定义版本的 Table 来覆盖 getPreferredSize 方法本身

public class SizableTable extends Table { 
    //... Constructors ...

    public Dimension getPreferredSize() {
        cvars = CVarList.getInstance();
        return new Dimension(cvars.get("Window", "width", int.class, 800),
            cvars.get("Window", "height", int.class, 600));
    }
}

并且不要在 main 方法中创建 Table 的实例,而是创建 SizableTable 的实例,将其添加到窗口,然后调用 pack

关于java - 如何将 Java 窗口(实际上是 JFrame)设置为正确的分辨率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31236223/

相关文章:

objective-c - 将首选项窗口添加到 Mac 应用程序

javascript - 如何检查浏览器窗口是否处于事件状态?

java - JBoss类路径问题

java - 如何使用 JavaExec 任务将 Java 代码嵌入到 Gradle 构建中

java - 控件不断从我的 JFrame 中消失,没有 JPanes 或任何要绘制的内容

java - 我没有得到两个相似的 JFrame,而是得到了一个带有双组件的 JFrame

graphics - 如何更改当前绘图窗口大小(在 R 中)

java - 无法打开 neo4j DB

java - 如何在SpringMVC(5.x)项目中启用ehCache(3.x)

java - 最终字符串[]和最终字符串