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

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

У меня есть граница на RootPane, и я мог использовать MouseListeners на Границе или 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();
    }
}
9
задан Jonas 6 May 2010 в 11:54
поделиться

3 ответа

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

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

6
ответ дан 4 December 2019 в 13:00
поделиться

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

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

Об этом можно почитать еще на Sexy Swing App - The Unified Toolbar и How to control window decorations

5
ответ дан 4 December 2019 в 13:00
поделиться

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

5
ответ дан 4 December 2019 в 13:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: