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

Mengapa komponen GUI dikaburkan dalam JFrame menggunakan BorderLayout?

Patricia Arquette
Patricia Arquetteasal
2024-11-07 16:59:03258semak imbas

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

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()));
        }
    }
}

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!

Kenyataan:
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