首頁  >  文章  >  Java  >  為什麼使用 BorderLayout 在 JFrame 中隱藏 GUI 元件?

為什麼使用 BorderLayout 在 JFrame 中隱藏 GUI 元件?

Patricia Arquette
Patricia Arquette原創
2024-11-07 16:59:03258瀏覽

Why are GUI components obscured in a JFrame using BorderLayout?

GUI 元件在JFrame 中被遮蔽

正如一位使用者所觀察到的,GUI 程式碼中的問題導致所有元件無法正確顯示。具體來說,頂部面板遮住了其他面板。

原因:

此問題是由於 JFrame 中使用的 BorderLayout 佈局而出現的。預設情況下,新增的沒有特定約束的元件會自動放置在 CENTER 位置,這樣只允許一個元件可見。

解決方案:

修復此佈局問題,更改代碼如下:

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

額外優化:

  1. 移除f.setSize(500, 500);並在setVisible(true) 之前呼叫pack() 以獲得更好的適配視窗。
  2. 使用 f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);正確處理 GUI 視窗。
  3. 刪除 in.setVisible(true);和 out.setVisible(true);因為元件在新增至 JFrame 時會自動可見。
  4. 將公用類別 EncDecExample 擴展為 JFrame 公用類別 EncDecExample,以實現更好的程式碼組織。

完整最佳化程式碼:

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

以上是為什麼使用 BorderLayout 在 JFrame 中隱藏 GUI 元件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn