首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有Synthetica Look and Feel (LAF)和多个监视器的Java最大化窗口

具有Synthetica Look and Feel (LAF)和多个监视器的Java最大化窗口
EN

Stack Overflow用户
提问于 2015-07-13 09:11:20
回答 1查看 305关注 0票数 2

我正在使用Synthetica Black Eye LAF (http://www.jyloo.com/synthetica/)和一个使用Java1.7的应用程序。似乎当我启用Synthetica LAF时,如果我将屏幕拖到另一个更大的显示器上,并通过双击或单击最大化图标来最大化窗口,则窗口占用的空间与主显示器上的“全屏”大小相同。当我没有启用LAF时,它不会这样做。它好像没有意识到它在哪个屏幕上的尺寸。有什么解决方法吗?

我已经有效地做到了这一点:Java Toolkit Getting Second screen sizejava & fullscreen over multiple monitors,这很好,因为现在我可以将首选大小设置为更大的显示器的大小,但这对我的最大化问题没有帮助。

下面是我的代码:

代码语言:javascript
复制
package mil.innovation.bewear.maintenance.windows;

import de.javasoft.plaf.synthetica.SyntheticaBlackEyeLookAndFeel;

import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class Windows {

public static void main(String[] args) {
    try {
        UIManager.setLookAndFeel(new SyntheticaBlackEyeLookAndFeel());
    } catch (Exception e) {
         System.out.println("Look and feel not started");
    }

    Dimension dimension;

    GraphicsEnvironment graphicsEnvironment = GraphicsEnvironment.getLocalGraphicsEnvironment();
    GraphicsDevice[] devices = graphicsEnvironment.getScreenDevices();
    GraphicsDevice biggest;
    if (devices.length > 1) {
        biggest = devices[0];
        for (GraphicsDevice device : devices) {
            if (device.getDefaultConfiguration().getBounds().getSize().getWidth() > biggest.getDefaultConfiguration().getBounds().getSize().getWidth())
                biggest = device;
        }
        dimension = biggest.getDefaultConfiguration().getBounds().getSize();
    } else if (devices.length == 1)
        dimension = devices[0].getDefaultConfiguration().getBounds().getSize();
    else {
        throw new RuntimeException("No Screens detected");
    }

    String filePath = "C:\\Users\\Bewear2\\IdeaProjects\\bewear_windows\\imgNotFound.png";
    JFrame frame = new JFrame("Example");
    JLabel lblPicture = new JLabel();
    lblPicture.setPreferredSize(dimension);
    lblPicture.setSize(dimension);
    BufferedImage image;
    try {
        image = ImageIO.read(new File("imgNotFound.png"));
        lblPicture.setIcon(new ImageIcon(image));
    }catch (IOException ex) {
        System.out.println("Error loading the picture that is supposed to load when loading a picture fails" + ex);
    }
    try {
        image = ImageIO.read(new File(filePath));
        Image bufferedImg = image.getScaledInstance(lblPicture.getWidth(), lblPicture.getHeight(), Image.SCALE_SMOOTH);
        lblPicture.setIcon(new ImageIcon(bufferedImg));
    } catch (IOException ex) {
        System.out.println("Error loading picture " + ex);
    }
    frame.setContentPane(lblPicture);
    frame.pack();
    frame.setVisible(true);
}

}

EN

回答 1

Stack Overflow用户

发布于 2015-07-15 23:25:29

来自客户支持的电子邮件:

这主要是一个已知的多屏幕环境中的Java Swing问题,只有在使用不同的屏幕分辨率时才会发生-请参阅http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6829250。它的目标是在V9中修复。然而,还有另一个问题(#7010721 http://bugs.java.com/bugdatabase/view_bug.do?bug_id=7010721 )会影响窗口大小,所以请确保使用最新的JVM。如果问题仍然存在,一种可能的解决方法是启用本机框架装饰(请参阅常见问题解答窗口装饰#1 http://www.jyloo.com/synthetica/faq/#windowDecoration-1 )另一种解决方法是将系统属性"synthetica.frame.fullscreen“设置为true,但这将覆盖操作系统的任务栏。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31374187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档