> Java > java지도 시간 > 본문

BorderLayout을 사용하는 JFrame에서 GUI 구성 요소가 가려지는 이유는 무엇입니까?

Patricia Arquette
풀어 주다: 2024-11-07 16:59:03
원래의
258명이 탐색했습니다.

Why are GUI components obscured in a JFrame using BorderLayout?

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
로그인 후 복사

추가 최적화:

  1. Remove 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!