当前位置: 首页 > 知识库问答 >
问题:

JFrame isResizable(假)大小调整问题

陶星波
2023-03-14

我打算制作一个具有600x600的ContentPanel的JFrame,并且我希望JFrame不是可重放的。在这个框中,我画了一个600x600的红色矩形,以确保运行程序时所有内容都匹配。在限制JFrame的大小之前,我通过执行以下操作来设置JFrame的大小:

getContentPane().setPreferredSize( new Dimension(600,600));
pack();

注意:在不修改大小的情况下创建一个JFrame也可以观察到这个异常。如果不使其不可调整大小,则没有可观察的Panel/ContentPane,但是当使用isResizable(false)时,会有Panel/Pane的可见部分。

共有1个答案

董元徽
2023-03-14

你是对的,将一个框架设置为不可重放似乎确实增加了10个像素的高度和宽度,至于为什么,我不能说,这似乎是更新本机对等体的副作用,然而...

您可以通过在调用jframe#setResizable之后调用jframe#pack来重置它

public class TestResizableFrame {

    public static void main(String[] args) {
        new TestResizableFrame();
    }

    public TestResizableFrame() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                JFrame frame = new JFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(new FixedPane());
                frame.setResizable(false);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class FixedPane extends JPanel {

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(200, 200);
        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            Dimension size = getSize();
            String text = size.width + "x" + size.height;
            FontMetrics fm = g.getFontMetrics();
            int x = (getWidth()- fm.stringWidth(text)) / 2;
            int y = ((getHeight() - fm.getHeight()) / 2) + fm.getAscent();
            g.drawString(text, x, y);
            g.setColor(Color.RED);
            g.drawRect(0, 0, getWidth() - 1, getHeight() - 1);
        }

    }

}
 类似资料:
  • 问题内容: 调整在管理面板中设置的图像大小时出现问题。 然后我尝试删除height: 100px似乎可以解决问题的属性,但是由于某种原因关闭了一张图像 问题答案: 如果您不希望图像拉伸,则应固定一个尺寸,而将另一个尺寸设为auto。(这将保留图像的长宽比) 请参阅下面的示例,其中width在height自动调整时保持不变: 请参阅下面的示例,其中height在width自动调整时保持不变:

  • 问题内容: 我打算制作一个ContentPanel为600x600的JFrame,并且我希望JFrame的大小不可调整。在此框内,我绘制了一个600x600的红色轮廓矩形,以确保运行程序时所有内容都匹配。在限制JFrame的大小之前,我通过执行以下操作来设置JFrame的大小: 当我启动程序时,矩形的边界与JFrame的尺寸完全吻合。但是,当我在公式中添加isResizable(false)时,在

  • 我正在用GWT/GXT开发一个基于浏览器的应用程序。html文件包含一个用html编写的静态头文件和一个用视口填充的div。 视口在这里非常有用,因为它允许自动调整大小。但是,视口始终随浏览器大小而调整大小,并且不考虑html标题大小。所以我总是有一部分视口隐藏:/ 你知道另一种方法吗? 对不起,我的英语很差:)谢谢

  • 我正在尝试构建一个包含6个窗格(作为父级添加到GridPane布局中)的简单Java项目。我必须在开始时设置窗口大小,并通过参考根布局的宽度和高度,设法将它们均匀地拆分。 但我想要他们调整大小,因为我改变了窗口的大小(使用鼠标,现在他们得到固定的大小)。 下面是我的代码:

  • 我有一个问题已经部分解决了,但我很好奇另一个(更好的)解决方法…我想要一个画布,什么填充整个窗口,并调整自己的大小,如果窗口的大小。 根据这个:https://dlemmermann.wordpress.com/2014/04/10/javafx-tip-1-resizable-canvas/和这个:如何在JavaFX中使canvas可调整大小?我已创建(复制)类: 并将以下内容放入viewfie

  • 我最近在测试一个并发负载相对较高的演示应用程序。该应用程序是一个java应用程序,运行在Hotspot JVM(1.8.0_111)上。 使用4G堆和并行吞吐量收集器,我可以获得大约400 TPS的最大吞吐量。吞吐量图(作为负载的函数)如下所示。 因为Oracle建议对大于4G的堆大小使用G1GC,所以我想尝试G1,看看这是否对我的应用程序吞吐量有任何好处。 令我惊讶的是,在G1GC中,我看到了低