JFrame в системе с двумя мониторами - PullRequest
1 голос
/ 01 марта 2012

Я пытаюсь отобразить два JFrames, по одному на каждом мониторе, и кажется, что код выводит неправильные вещи.Мой вопрос о границе похож на эти ...
Вопрос 1
Вопрос 2
Вопрос 3
За исключением моегоделать с кадрами JFrame, которые в основном переопределяются и отображаются пустыми.Пример кода ниже из одного из вопросов, которые я тестировал, чтобы убедиться, что это то, что я хотел, но JFrames не показывают ничего, как я хочу.Они пустые, хотя должны отображать значки.Код прост, так как я пытаюсь выяснить, почему JFrames становятся изменяемого размера и не выходят так, как они должны.

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

public class Dual extends JFrame implements ActionListener, ChangeListener {
    public Dual(String one) {
        JFrame frame = new JFrame(one);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        frame.setResizable(false);
    }

    public static void showOnScreen(int screen, JFrame frame) {
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        GraphicsDevice[] gs = ge.getScreenDevices();
        if( screen > -1 && screen < gs.length ) {
            gs[screen].setFullScreenWindow(frame);
        } else if( gs.length > 0 ) {
            gs[0].setFullScreenWindow(frame);
        } else {
            throw new RuntimeException( "No Screens Found" );
        }
    }

    public static void main(String[] args) {
        showOnScreen(1, new Dual("Test"));
        showOnScreen(2, new Dual("1...2"));
        GraphicsDevice[] devices = GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices();
        for ( int i = 0; i < devices.length; i++ ) {
            System.out.println( "Device " + i + " width: " + devices[ i ].getDisplayMode().getWidth() );
            System.out.println( "Device " + i + " height: " + devices[ i ].getDisplayMode().getHeight() );
        }       
    }
}

1 Ответ

0 голосов
/ 11 июля 2012

Насколько я могу судить, ты испортил свои ссылки.Вам не нужен JFrame, вам действительно нужно окно.

Проверьте http://www.exampledepot.com/egs/java.awt/screen_FullWin.html для примера.Я использовал это, чтобы изменить ваш код для создания рабочей модели, которая в итоге выглядела примерно так:

public class Dual extends Window implements ActionListener, ChangeListener {

    private int screen;

    public Dual(String one) {

        super(new Frame());

        setLayout(new FlowLayout());

        JButton button = new JButton(one);
        button.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {

                GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
                GraphicsDevice[] gs = ge.getScreenDevices();
                if (screen > -1 && screen < gs.length) {
                    gs[screen].setFullScreenWindow(null);

                }

                dispose();
                System.exit(0);

            }
        });

        add(button);

    }

    public void setScreen(int screen) {

        this.screen = screen;

    }

    public static void showOnScreen(int screen, Dual frame) {
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        GraphicsDevice[] gs = ge.getScreenDevices();
        if (screen > -1 && screen < gs.length) {
            frame.setScreen(screen);
            gs[screen].setFullScreenWindow(frame);
            frame.validate();
        } else if (gs.length > 0) {
            gs[0].setFullScreenWindow(frame);
        } else {
            throw new RuntimeException("No Screens Found");
        }
    }

    public static void main(String[] args) {
        showOnScreen(1, new Dual("Test"));
    showOnScreen(2, new Dual("1...2"));
//        GraphicsDevice[] devices = GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices();
//        for ( int i = 0; i < devices.length; i++ ) {
//            System.out.println( "Device " + i + " width: " + devices[ i ].getDisplayMode().getWidth() );
//            System.out.println( "Device " + i + " height: " + devices[ i ].getDisplayMode().getHeight() );
//        }       
    }

    @Override
    public void actionPerformed(ActionEvent e) {
    }

    @Override
    public void stateChanged(ChangeEvent e) {
    }
}
...