Резервирование края экрана в Java - PullRequest
6 голосов
/ 11 января 2011

Как сделать окно (например, java.awt.Frame, javax.swing.JFrame, java.awt.Dialog, javax.swing.JDialog и т. Д.) Зарезервировать край экрана, например док, панель задач, Trillian или Microsoft OneNoteМожно?Я стараюсь использовать только стандартные библиотеки JDK, если это возможно.

Ответы [ 2 ]

2 голосов
/ 25 февраля 2011

Это поведение очень специфично для операционной системы Windows, и поэтому нет способа сделать это в стандартном JDK или с AWT / Swing, поскольку они должны согласованно работать в ряде различных операционных систем.

Ближайший эквивалент того, что вы хотите, это получить границы текущего экрана и переместить / изменить размер окна так, чтобы оно совпало с одной стороной, хотя теперь это будет иметь какой-либо эффект на рабочем столе или в других окнах.

Ближайшая вещь, которую вы, вероятно, получите к тому, что вы хотите, это использовать JNIWrapper и WinPack для изменения поведения собственного окна.Однако в их документации ничего не говорится о панелях инструментов рабочего стола.Возможно, вам придется использовать их JNI для прямого доступа к определенным функциям COM, а затем узнать, как это сделать в C ++, но если вы не знаете C ++, это, вероятно, выходит за рамки вашего проекта.

Приложение:

Если вы хотите использовать встроенные функции для определенных операционных систем и менеджеров рабочего стола, вам нужно будет подключиться с native C ++ библиотекой для подключения к Gnome, KDE,Mac OS и т. Д. Найдите «Java JNI» и систему управления окнами, с которой вы хотите интегрироваться, чтобы найти пакеты, которые вы можете использовать.Например, для Gnome см. здесь .

Если вы хотите поддерживать несколько операционных систем, убедитесь, что вы создали общий интерфейс, чтобы вы могли создавать реализации, которые соединяются с соответствующими JNI в зависимости откакой из них доступен во время выполнения, и разрешить откат, если ни один из них не доступен.

PS.Если вам нужны всплывающие уведомления в вашем приложении, Mac OS и различные сборки Linux поддерживают Growl, что может сэкономить вам время.

2 голосов
/ 12 января 2011

Вы можете использовать Toolkit.getDefaultToolkit (). GetScreenInsets () Из источников JMenu

Toolkit toolkit = Toolkit.getDefaultToolkit();
    GraphicsConfiguration gc = getGraphicsConfiguration();
    Rectangle screenBounds = new Rectangle(toolkit.getScreenSize());
    GraphicsEnvironment ge =
        GraphicsEnvironment.getLocalGraphicsEnvironment();
    GraphicsDevice[] gd = ge.getScreenDevices();
    for(int i = 0; i < gd.length; i++) {
        if(gd[i].getType() == GraphicsDevice.TYPE_RASTER_SCREEN) {
            GraphicsConfiguration dgc =
                gd[i].getDefaultConfiguration();
            if(dgc.getBounds().contains(position)) {
                gc = dgc;
                break;
            }
        }
    }


    if (gc != null) {
        screenBounds = gc.getBounds();
        // take screen insets (e.g. taskbar) into account
        Insets screenInsets = toolkit.getScreenInsets(gc);

        screenBounds.width -= 
                    Math.abs(screenInsets.left + screenInsets.right);
        screenBounds.height -= 
                    Math.abs(screenInsets.top + screenInsets.bottom);
        position.x -= Math.abs(screenInsets.left);
        position.y -= Math.abs(screenInsets.top);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...