Saya membuat JFrame, menggunakan tampilan dan nuansa khusus bernama FlatLaf. Tapi saya mengalami perilaku aneh ketika saya mengubah ukuran jendela. Saya dapat mereplikasi masalah yang sama persis dengan cuplikan ini: import com....

1
Grubsic 5 April 2021, 21:14

1 menjawab

Jawaban Terbaik

Masalahnya adalah ketika saya mengubah ukuran dari kiri dan atas bingkai, itu mulai bergerak ke arah itu

Efek ini terjadi karena Anda menyetel ukuran minimum JFrame, bersama dengan fakta bahwa Anda menghapus dekorasi bingkai. Jadi jangan atur ukuran minimum, atau biarkan dekorasi diaktifkan. Jika Anda membiarkan dekorasi diaktifkan dan tetap mengatur ukuran minimum, maka pengguna akan dapat mengubah ukuran bingkai hingga mencapai dimensi minimum yang sesuai di mana, alih-alih bergerak, bingkai akan tetap di tempatnya.


Sedangkan untuk bilah judul, jika Anda membutuhkan semua karakteristik yang baik (seperti 3 tombol di sebelah kanan, judul dan ikon bingkai di sebelah kiri dan bilah di tengah yang sebenarnya dapat diseret oleh pengguna ke pindahkan bingkai), tetapi Anda juga ingin memiliki warna tertentu, maka jangan hapus dekorasi dan hanya ubah warna komponen bilah judul, yang dapat dilakukan seperti:

import com.formdev.flatlaf.FlatDarkLaf;
import com.formdev.flatlaf.FlatLaf;
import javax.swing.*;
import java.awt.*;

public class Main {
    public static void main(final String[] args) {
        final FlatDarkLaf laf = new FlatDarkLaf();
        FlatLaf.install(laf);
        final Color controlColor = laf.getDefaults().getColor("control"); //Obtains the background color of FlatDarkLaf.

        //Change the title bar active and inactive color...
        UIManager.put("TitlePane.inactiveBackground", controlColor); //This is the color of the title bar when the frame doesn't have focus.
        UIManager.put("TitlePane.background", controlColor); //This is the color of the title bar when the frame has focus.
        
        final JFrame frame = new JFrame("Title");
        
        frame.setSize(1280, 720);
        frame.setMinimumSize(new Dimension(750, 400));
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

Dalam hal ini, Anda harus membiarkan dekorasi diaktifkan. Tapi sepertinya itu ok karena Anda menginginkan karakteristik bilah judul, hanya dengan warna latar belakang yang berbeda di dalamnya.

Saya mengetahui tentang properti/kunci "TitlePane.inactiveBackground" dan "TitlePane.background" dalam dokumentasi kode sumber kelas FlatTitlePane yang dapat dilihat oleh seseorang (di kode sumber FlatRootPaneUI) ini adalah kelas yang sedang diinstal pada panel akar bingkai sebagai bilah judulnya.

Saya telah melihat tentang bagian laf.getDefaults().getColor("control"); di kode sumber FlatLaf (dalam metode getDefaults).

Menurut beberapa instruksi dari halaman web FlatLaf, Anda sebaiknya menyetel properti tersebut setelah menginstal LAF dan sebelum membuat komponen.

0
gthanop 5 April 2021, 20:54