JFrame에서 GUI 구성 요소가 가려짐
한 사용자가 관찰했듯이 GUI 코드의 문제로 인해 모든 구성 요소가 올바르게 표시되지 않습니다. 특히 상단 패널이 다른 패널을 가립니다.
원인:
이 문제는 JFrame에서 사용되는 BorderLayout 레이아웃으로 인해 발생합니다. 기본적으로 특정 제약 조건 없이 추가된 구성 요소는 중앙 위치에 자동으로 배치되므로 하나의 구성 요소만 표시됩니다.
해결책:
이 레이아웃 문제를 해결하려면 , 다음과 같이 코드를 변경합니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!