ホームページ  >  記事  >  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?

JFrame で隠された GUI コンポーネント

あるユーザーが観察したように、GUI コードの問題により、すべてのコンポーネントが正しく表示されません。具体的には、トップパネルが他のパネルを隠します。

原因:

この問題は、JFrame で使用される BorderLayout レイアウトが原因で発生します。デフォルトでは、特定の制約なしで追加されたコンポーネントは自動的に中央の位置に配置され、1 つのコンポーネントのみが表示されます。

解決策:

このレイアウトの問題を解決するには、コードを次のように変更します:

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. Remove 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。