Java - максимальное окно с Synthetica Look and Feel (LAF) и несколькими мониторами

Я использую Synthetica Black Eye LAF ( http://www.jyloo.com/synthetica/) с приложением, использующим Java 1.7. Кажется, что когда я включил Synthetica LAF, если я перетащил экран на второй монитор большего размера и развернул окно, дважды щелкнув или щелкнув по значку максимизации, окно заняло бы столько же места, сколько размер "Полный экран" на основном мониторе. Когда у меня не включен LAF, он этого не делает. как будто он не осознает размеры экрана. Есть ли обходной путь для этого?

Я эффективно сделал это: Java Toolkit Получение второго размера экрана и java & fullscreen на нескольких мониторах, что приятно, так как теперь я могу установить предпочтительный размер для большего монитора, но это не помогает мне решить проблему с максимизацией.

Вот мой код:

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);
}

}

1 ответ

Электронная почта от службы поддержки:

это в основном известная проблема 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/) другой обходной путь должен установить системное свойство "synta.frame.fullscreen"в true, но это будет охватывать панель задач ОС.

Другие вопросы по тегам