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

JFrame最初显示的最大宽度限制在我的显示器宽度

汝臻
2023-03-14

我的一个程序中的javaJFrame类遇到了一个奇怪的问题。谢天谢地,我能够使用FrameDemo复制这个问题。java示例取自Oracle网站:

https://docs.oracle.com/javase/tutorial/displayCode.html?code=https://docs.oracle.com/javase/tutorial/uiswing/examples/components/FrameDemoProject/src/components/FrameDemo.java

我将emptyLabel的维度更改为(3005100),然后编译并启动程序。在我的双显示器上,我希望帧几乎跨越两个显示器(每个显示器都有1920像素宽)。

相反,我看到的是JFrame的大小适合单个显示器的宽度。我似乎无法让窗口跨越两个监视器。我做错什么了吗?我运行的是Centos 7.5,使用的是jdk 1.8.060。

确切的代码出现在下面。它主要是甲骨文演示的复制/粘贴,一些注释被删除以保持简短。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

/* FrameDemo.java requires no other files. */
public class FrameDemo {
    /**
     * Create the GUI and show it.  For thread safety,
     * this method should be invoked from the
     * event-dispatching thread.
     */
    private static void createAndShowGUI() {
        //Create and set up the window.
        JFrame frame = new JFrame("FrameDemo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JLabel emptyLabel = new JLabel("blahblah");
        emptyLabel.setPreferredSize(new Dimension(3005, 100));
        frame.getContentPane().add(emptyLabel, BorderLayout.CENTER);

        //Display the window.
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        //Schedule a job for the event-dispatching thread:
        //creating and showing this application's GUI.
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}

共有1个答案

阙项禹
2023-03-14

非常感谢疯狂程序员。不幸的是,在我更复杂的程序中,第二次打包的调用似乎没有起到作用。

我最终选择的解决方法是计算所有组件的累积宽度(它们被加载到JSplitPane中)。这等于左窗格、右窗格和分隔线的宽度。如果这个累积宽度超过监视器的宽度,我将帧最小大小设置为这个累积宽度。这似乎可以确保框架在出现时可以跨越两个显示器。然后,在使事情可见之后,我将最小大小重置为我在启动时保存的值。这允许我的JFrame出现在两个屏幕上,但仍然可以调整到更小的尺寸。

这确实是一个令人讨厌的变通方法。我已经将此报告为错误http://bugs.java.com.它被列为以下错误:http://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8213620

 类似资料:
  • 问题内容: 我有这个设置: HTML : CSS : 通过此设置,它可以在iPhone上运行,但不能在浏览器中运行。 是因为我已经在meta中,也许已经在? 问题答案: 我发现最好的方法是为较旧的浏览器编写默认CSS,因为较旧的浏览器包括5.5、6、7和8。无法读取@media。当我使用@media时,我会这样使用: 但是,您可以使用@media进行任何操作,这只是为所有浏览器构建样式时最适合我的

  • 问题内容: 我正在使用PostgreSQL,并且在表中有一列,其中包含非常长的文本。我想在查询中选择此列,但限制其显示长度。 就像是: 我该怎么做? 问题答案: 您可以做的是使用PostgreSQL的substring()方法。以下两个命令之一将起作用:

  • 代码: 按照网上的方法设置了css样式 但是不起作用,不知道是什么原因

  • 问题内容: 使用CSS媒体查询,您可以用于定位设备宽度(例如iPhone或Android设备)和/或定位页面宽度的。 如果使用,则在更改桌面上浏览器窗口的大小时,CSS不会更改,因为您的桌面不会更改大小。 如果使用,则在更改桌面上浏览器窗口的大小时,可能会显示面向移动的样式,例如触摸友好的元素和菜单等。 现在已不再针对特定的浏览器(和设备?)定位,并且您应该对目标对象有所了解。那也适用于媒体查询吗

  • 问题内容: 我想显示一个带有边距的可扩展()… 这是我的代码: 这是我的CSS代码: 问题答案: 您可以使用以下CSS达到所需的结果:

  • 我正在用Java开发一个简单的2D游戏。 我正在使用JFrame类,但是我不认为宽度和高度是我指定的,或者图形不正确。 下面是我的一些代码片段: JFrame显示黑色背景。然而,根据我给fillRect函数的参数,框架底部仍然应该有一条10px高的白色长条。事实并非如此。白色的银条只有在从框架高度降低30像素后才真正开始显示。 谢谢你的帮助。