Расположение панели задач Windows 10 - PullRequest
0 голосов
/ 07 июня 2018

Я хочу знать положение панели задач для моего проекта javafx.Значит, я хочу знать, находится ли панель задач сверху, снизу, слева или справа.Я хочу сделать что-то в коде, когда позиция панели задач изменяется.Как я могу сделать эти вещи?

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Вы можете получить вставки экрана для данного экранного устройства, используя java.awt.Toolkit.

Для основного экрана:

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice defaultScreenDevice = ge.getDefaultScreenDevice();
GraphicsConfiguration defaultConfiguration = defaultScreenDevice.getDefaultConfiguration();
Insets screenInsets = Toolkit.getDefaultToolkit().getScreenInsets(defaultConfiguration);

Вставки для моего основного экрана (с использованием Windows 10):

java.awt.Insets [top = 0, left = 0, bottom = 40, right = 0]

Следовательно, панель задач имеет высоту 40 пикселей,и внизу экрана.

0 голосов
/ 07 июня 2018

В следующем подходе используется только API JavaFX.

Я протестировал его с Win 10 и java 8 update 161. Он работает, но не запускается, когда панель задач может скрывать динамически отображаемый экран (всегдасчитает, что границы в этом случае равны визуальным границам.)

Поскольку обновление списка осуществляется с помощью не публичного Toolkit API, оно может работать некорректно для другой ОС.

ObservableList<Screen>, возвращаемое Screen.getScreens(), изменяется при изменении (визуальных) границ Screen.Этот факт можно использовать для определения стороны панели задач на основном экране на основе разницы между bounds и visualBounds:

InvalidationListener listener = new InvalidationListener() {

    private Side currentSide = null;

    public void invalidated(Observable o) {
        Screen primary = Screen.getPrimary();
        Rectangle2D bounds = primary.getBounds();
        Rectangle2D visualBounds = primary.getVisualBounds();
        Side side = null;

        // determine side of task bar, if size differs
        if (bounds.getWidth() > visualBounds.getWidth()) {
            if (bounds.getMinX() < visualBounds.getMinX()) {
                side = Side.LEFT;
            } else if (bounds.getMaxX() > visualBounds.getMaxX()) {
                side = Side.RIGHT;
            }
        } else if (bounds.getHeight() > visualBounds.getHeight()) {
            if (bounds.getMinY() < visualBounds.getMinY()) {
                side = Side.TOP;
            } else if (bounds.getMaxY() > visualBounds.getMaxY()) {
                side = Side.BOTTOM;
            }
        }

        // only notify once per change independent of size of task bar
        if (side != currentSide) {
            currentSide = side;
            System.out.println(side == null
                    ? "Side of task bar unknown/task bar not displayed"
                    : "The task bar is now displayed in the " + side);
        }
    }
};
Screen.getScreens().addListener(listener);
listener.invalidated(null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...