当前位置: 首页 > 面试题库 >

JFrame isResizable(false)大小调整问题

须鸿祯
2023-03-14
问题内容

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

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

当我启动程序时,矩形的边界与JFrame的尺寸完全吻合。但是,当我在公式中添加isResizable(false)时,在矩形的右边缘与矩形的下边缘之间似乎存在像素缓冲区。稍作尝试,似乎isResizable(false)将高度和宽度添加了10个像素。(因此,contentPane的尺寸为590x590
+额外的10个是我的解决方法)

我的问题,这是为什么?我似乎在任何地方都找不到有关额外10像素的文档?

注意:也可以通过在不修改大小的情况下制作JFrame来观察此异常。在不使其无法调整大小的情况下,没有可观察的面板/
contentPane,但是当使用isResizable(false)时,面板/窗格中存在可见的部分。


问题答案:

没错,将帧设置为不固定似乎不会为其高度和宽度增加10个像素,至于我为什么不能说,这似乎是更新本机对等端的副作用,但是…

您可以在通话JFrame#pack后通过通话将其重置JFrame#setResizable

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自动调整时保持不变:

  • 我打算制作一个具有600x600的ContentPanel的JFrame,并且我希望JFrame不是可重放的。在这个框中,我画了一个600x600的红色矩形,以确保运行程序时所有内容都匹配。在限制JFrame的大小之前,我通过执行以下操作来设置JFrame的大小: 注意:在不修改大小的情况下创建一个JFrame也可以观察到这个异常。如果不使其不可调整大小,则没有可观察的Panel/ContentP

  • 我正在用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中,我看到了低