Rumah > Java > javaTutorial > Mengapa komponen GUI dikaburkan dalam JFrame menggunakan BorderLayout?

Mengapa komponen GUI dikaburkan dalam JFrame menggunakan BorderLayout?

Patricia Arquette
Lepaskan: 2024-11-07 16:59:03
asal
335 orang telah melayarinya

Why are GUI components obscured in a JFrame using BorderLayout?

Komponen GUI Dikaburkan dalam JFrame

Seperti yang diperhatikan oleh seorang pengguna, isu dalam kod GUI menghalang semua komponen daripada dipaparkan dengan betul. Khususnya, panel atas mengaburkan panel lain.

Punca:

Masalah ini timbul disebabkan oleh reka letak BorderLayout yang digunakan dalam JFrame. Secara lalai, komponen yang ditambahkan tanpa kekangan khusus diletakkan secara automatik pada kedudukan CENTER, yang membenarkan hanya satu komponen kelihatan.

Penyelesaian:

Untuk menyelesaikan isu reka letak ini , tukar kod seperti berikut:

f.add(top, BorderLayout.PAGE_START); // Add top panel to PAGE_START position
f.add(mid); // Add mid panel with default BorderLayout.CENTER constraint
f.add(bot, BorderLayout.PAGE_END); // Add bot panel to PAGE_END position
Salin selepas log masuk

Tambahan Pengoptimuman:

  1. Alih keluar f.setSize(500, 500); dan panggil pack() sebelum setVisible(true) untuk tetingkap yang lebih sesuai.
  2. Gunakan f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); untuk melupuskan tetingkap GUI dengan betul.
  3. Alih keluar in.setVisible(true); dan out.setVisible(true); kerana komponen kelihatan secara automatik apabila ditambahkan pada JFrame.
  4. Tukar kelas awam EncDecExample memanjangkan JFrame kepada kelas awam EncDecExample untuk organisasi kod yang lebih baik.

Kod Dioptimumkan Lengkap:

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.*;

public class EncDecExample implements ActionListener {
    final static JPanel top = new JPanel();
    final static JPanel mid = new JPanel();
    final static JPanel bot = new JPanel();
    final static JTextField in = new JTextField(10);
    final static JTextField out = new JTextField(10);
    final static JButton enc = new JButton("Encrypt");
    final static JButton dec = new JButton("Decrypt");
    final static JFrame f = new JFrame("Encryption/decryption");

    public static void main(String[] args) {
        f.setSize(500, 500);
        f.setResizable(false);
        out.setEditable(false);
        out.setText("Hello");
        top.add(in);
        mid.add(enc);
        mid.add(dec);
        bot.add(out);
        f.add(top, BorderLayout.PAGE_START);
        f.add(mid);
        f.add(bot, BorderLayout.PAGE_END);
        f.pack();
        f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        f.setVisible(true);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == enc && !in.getText().equalsIgnoreCase("")) {
            out.setText(e(in.getText(), 5));
        } else if (e.getSource() == dec && !in.getText().equalsIgnoreCase("")) {
            out.setText(d(in.getText()));
        }
    }
}
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapa komponen GUI dikaburkan dalam JFrame menggunakan BorderLayout?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan