Как добавить поддержку изменения размера при использовании недокрашенного JFrame? - PullRequest
9 голосов
/ 06 мая 2010

Я бы хотел настроить заголовок, свернуть, развернуть и кнопку закрытия. Поэтому я использовал setUndecorated(true); на своем JFrame, но я все еще хочу изменить размер окна. Каков наилучший способ реализовать это?

У меня есть граница на RootPane, и я мог бы использовать MouseListeners на Border или RootPane. Любые рекомендации?

import java.awt.Color;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.border.LineBorder;

public class UndecoratedFrame extends JFrame {

    private LineBorder border = new LineBorder(Color.BLUE,2);
    private JMenuBar menuBar = new JMenuBar();
    private JMenu menu = new JMenu("File");
    private JMenuItem item = new JMenuItem("Nothing");

    public UndecoratedFrame() {
        menu.add(item);
        menuBar.add(menu);
        this.setJMenuBar(menuBar);
        this.setUndecorated(true);
        this.getRootPane().setBorder(border);
        this.setSize(400,340);
        this.setVisible(true);
    }

    public static void main(String[] args) {
        new UndecoratedFrame();
    }
}

Ответы [ 3 ]

6 голосов
/ 06 мая 2010

Как вы сказали, у вас есть граница на корневой панели. Как следствие, есть по крайней мере одно место (ниже области, где нарисована ваша граница), где ваша корневая панель является самым верхним компонентом. Как следствие, вы можете добавить его слушатель мыши и слушатель движения мыши.

При щелчке по корневой панели (и нажатии кнопки мыши) мышь и слушатели движения будут информировать вас о начальной и фактической позиции мыши. Как следствие, вы можете обновить размер кадра смещения между обоими значениями, сделав его размер изменяемым.

5 голосов
/ 07 мая 2010

Изменение размера компонентов показано в одну сторону.

5 голосов
/ 06 мая 2010

Я нашел хороший метод в RootPane , который дал мне эту функциональность, так что теперь мне осталось только узнать, как настроить заголовок и кнопки на нем.

Я добавил this.getRootPane().setWindowDecorationStyle(JRootPane.FRAME); в моем конструкторе для UndecoratedFrame.

Подробнее об этом читаем на Sexy Swing App - Унифицированная панель инструментов и Как управлять оформлением окон

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...