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

JFrame高度最大化时,程序未重绘

白才捷
2023-03-14
问题内容

您可以通过几种方式通过鼠标拖动来调整JFrame的大小:

  1. 您可以调整其高度(顶部/底部边缘)的大小
  2. 您可以调整其宽度大小(左/右边缘)
  3. 您可以调整两个大小(在角落)
  4. 您可以通过将整个窗口拖动到监视器顶部边缘来最大化它
  5. 您可以通过将其顶部/底部边缘拖动到显示器的顶部/底部边缘来最大化其高度

除了数字5以外,我的程序正在每一个动作上重新绘制。

这是为什么?

那可能是我程序中的错误吗?似乎并非如此。我不知道在特定情况下我应该在哪里放置重绘请求…似乎JFrame本身应该在每次调整大小后对其contentPane调用重绘,对吗?

它闻起来像Java本身的JFrame类中的错误。

SSCCE:

import javax.swing.JFrame;
import javax.swing.SwingUtilities;

class Gui
{
    Gui()
    {
        JFrame masterWindow = new JFrame("My very own SSCCE");

        masterWindow.setSize(1100, 100);
        masterWindow.setLocationRelativeTo(null);
        masterWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        masterWindow.setVisible(true);
    }
}

class Main
{
    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                new Gui();
            }
        });
    }
}

抓住JFrame的顶部边缘并将其拖动到屏幕的顶部边缘并释放。底部延伸部分应为黑色。如果您随后将其最大化,则它将全部变为灰色,这应该是灰色的。

我仍然说这是Java或Windows错误。


问题答案:

它似乎是Windows的Java实现中的错误。(我也在使用Windows 7和JDK7。)

当Windows决定更改窗口的高度时COMPONENT_MOVED,Window会收到一个事件,但不会COMPONENT_RESIZED收到任何事件。

在Windows类内部,非公共方法dispatchEventImpl()COMPONENT_RESIZED通过调用invalidate()和来响应事件validate(),但它将忽略COMPONENT_MOVED事件。

这是使窗口在发生此类事件后重新验证自身的蛮力方法。这可能在其他情况下偶尔使窗口重新验证,但不是很常见,因为Window类本身在每个COMPONENT_RESIZED事件之后都在进行重新验证,并且所报告的错误仅在用户正在主动调整窗口大小时发生。

    masterWindow.addComponentListener(new ComponentAdapter() {
      private int oldWidth = 0;
      private int oldHeight = 0;

      @Override
      public void componentResized(ComponentEvent e) {
        oldWidth = masterWindow.getWidth();
        oldHeight = masterWindow.getHeight();
      }

      @Override
      public void componentMoved(ComponentEvent e) {
          if (masterWindow.getWidth() != oldWidth || masterWindow.getHeight() != oldHeight) {
            masterWindow.invalidate();
            masterWindow.validate();
          }
          oldWidth = masterWindow.getWidth();
          oldHeight = masterWindow.getHeight();
      }
    });


 类似资料:
  • 问题内容: 我正在使用Swing制作快速且肮脏的动画。我希望窗口最大化。我怎样才能做到这一点? 问题答案: 前提是您要扩展JFrame:

  • 我试图设置一个渐变覆盖整个页面 这是我的代码: (我知道我写的最大高度:1%;,请继续阅读) 正如我所说,身高:100% 不起作用,所以我尝试使用各种输入,我看到的是,当我使用像素作为最大高度时,渐变的高度会发生变化,但无论我选择什么输入作为百分比的最大高度,渐变的高度都会保持不变,例如,在我的代码中,我使用了最大高度:1% 和渐变仍然超出了网页的高度。 我检查了开发工具,并应用了max heig

  • 问题内容: 编写CSS媒体查询时,有什么方法可以使用“或”逻辑指定多个条件? 我正在尝试做这样的事情: 问题答案: 使用逗号指定两个(或多个)不同的规则: 从https://developer.mozilla.org/en/CSS/Media_queries/ …此外,您可以在逗号分隔的列表中组合多个媒体查询;如果列表中的任何媒体查询为true,则将应用关联的样式表。这等效于逻辑“或”运算。

  • 问题内容: 允许用户调整窗口的宽度和高度。是否存在允许用户仅调整高度大小的方法? 谢谢。 编辑: 下面的解决方案似乎不起作用。在360x600 JFrame上, 仍然允许完全拉伸JFrame的宽度,而设置则不允许任何拉伸。 问题答案: 下面的代码可以正确完成工作。

  • 问题内容: 如何通过代码最大化JFrame? 问题答案: 试试这个:

  • 问题内容: 我在jFrame中使用和。这很好用,但是现在当我最大化框架时,即使任务栏不可见,它也会散布在整个窗口中。如何使框架不隐藏任务栏? 另外,当我最大化最小化我的帧时,光标会多次更改为该值,这通常用于当光标位于帧的边界时更改帧的大小。有什么我可以做的吗? 一小段代码即可重现内容: 问题答案: 这是一个已知的错误:http : //bugs.sun.com/bugdatabase/view_b