ホームページ >Java >&#&チュートリアル >BorderLayout を使用すると、JFrame で GUI コンポーネントが隠れてしまうのはなぜですか?
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
追加の最適化:
完全な最適化コード:
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 サイトの他の関連記事を参照してください。