Pertanyaan Bagaimana cara menambahkan dukungan untuk mengubah ukuran saat menggunakan JFrame yang tidak didekorasi?


Saya ingin menyesuaikan batang judul saya, meminimalkan-, memaksimalkan- dan tombol-dekat. Jadi saya menggunakan setUndecorated(true); di JFrame saya, tetapi saya masih ingin dapat mengubah ukuran jendela. Apa cara terbaik untuk mengimplementasikannya?

Saya memiliki perbatasan di RootPane, dan saya bisa menggunakan MouseListeners di Perbatasan atau RootPane. Ada rekomendasi?

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
2018-05-06 11:47


asal


Jawaban:


Seperti yang Anda katakan, Anda memiliki batas pada panel root Anda. Sebagai akibatnya, ada setidaknya satu lokasi (di bawah tempat di mana perbatasan Anda ditarik) di mana panel root Anda adalah komponen paling atas. Sebagai akibatnya, Anda dapat menambahkannya sebagai pendengar mouse dan pendengar gerakan mouse.

Ketika panel root Anda diklik (dan tombol mouse ditekan), mouse dan pendengar gerakan Anda akan memberitahu Anda tentang posisi mouse awal dan aktual. Sebagai akibatnya, Anda dapat memperbarui ukuran frame Anda dari offset antara kedua nilai, membuat frame Anda dapat diubah ukurannya.


6
2018-05-06 12:07



Mengubah Ukuran Komponen menunjukkan satu cara.


5
2018-05-06 21:19



Saya menemukan metode yang bagus di RootPane yang memberi saya fungsi ini, jadi sekarang saya hanya perlu mencari tahu cara menyesuaikan batang judul dan tombol di atasnya.

saya tambahkan this.getRootPane().setWindowDecorationStyle(JRootPane.FRAME); di konstruktor saya untuk UndecoratedFrame.

Ada beberapa bacaan lagi tentang ini Aplikasi Swing Seksi - Bilah Alat Tidak Bersatu dan Cara mengontrol dekorasi jendela


5
2018-05-06 12:40