我正在尝试从Java应用程序调整窗口大小以跨越8个连接的监视器。所有显示器都是完全相同的戴尔显示器,每个显示器分辨率为2560 X 1600。显示器的布局使得有4个横向和2个向下。这意味着所有8个监视器的总分辨率为10240 X 3200.但是,没有Java应用程序似乎能够扩展到大约4096 X 3200.因为我知道在将系统更新到OSX之前,Java应用程序能够扩展到所有8个监视器,这让我想知道Java是否与OSX没有很好的协作。
有没有人遇到过类似的问题?任何人都知道如何解决它或我是否可以?
以前的调查结果
系统详情 操作系统:OSX Yosemite(10.10.5), 处理器:2X2.26 GHz四核Intel Xeon, 记忆:16 BG, 图形:NVIDIA GeForce GT 120 512 MB
示例Java程序
import javax.swing.*;
class WindowTest extends JFrame {
public WindowTest() {
setSize(10240, 3200);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main (String[] args) {
WindowTest w = new WindowTest();
w.setVisible(true);
}
}
答案 0 :(得分:1)
非常有趣的问题,以及不错的SSCCE但我无法测试以下代码,因为我的机器只有一个显示端口,但我希望这可能有所帮助。
setSize(10240, 3200)
的调用经常被忽略,javadoc告诉我们
该方法更改与几何相关的数据。因此,本机窗口系统可能会忽略此类请求,或者它可能会修改所请求的数据,以便以与桌面设置紧密对应的方式放置和调整Window对象。
相反,我建议使用以下两种方法尝试强制调整大小,然后再调用pack()
:
setMinimumSize(new Dimension(10240, 3200));
setPreferredSize(new Dimension(10240, 3200));
除此之外,你可以而且应该指定相对于左/最顶部屏幕的JFrame位置,有点像这样:(编辑:更新以反映评论并在需要时添加pack()
)
import javax.swing.JFrame;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
class WindowTest extends JFrame
{
public WindowTest()
{
setLocation(0, 0);
//Set your window to a specific size, we can force this by calling pack() later
setMinimumSize(new java.awt.Dimension(10240, 3200));
setPreferredSize(new java.awt.Dimension(10240, 3200));
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main (String[] args)
{
try
{
// Set cross-platform Java L&F (also called "Metal")
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
}
catch (UnsupportedLookAndFeelException | ClassNotFoundException | InstantiationException | IllegalAccessException e)
{
//Do nothing, the progam will default to automatic system assigned L&F
System.out.println("Failed to set L&F to \"Metal\": "+e.getMessage());
}
WindowTest w = new WindowTest();
w.setVisible(true);
//Then try pack() to force your window size, and hopefully ignore OS sizing
w.pack();
}
}
这应该达到你想要的帧大小。