Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java에서 편집 가능한 JLabel을 구현하는 방법


JLabel이란?

  • JLabel 클래스는 JComponent 클래스를 상속하며, JLabel 객체는 GUI 화면에 텍스트 안내문이나 정보를 표시하는 역할을 합니다.
  • JLabel은 한 줄의 읽기 전용 텍스트, 이미지, 또는 텍스트와 이미지를 함께 표시할 수 있습니다.
  • JLabel의 주요 메서드로는 setText(), setIcon(), setBackground(), setOpaque(), setHorizontalAlignment(), setVerticalAlignment() 등이 있습니다.
  • JLabel은 PropertyChangeListener 인터페이스를 명시적으로 발생시킬 수도 있습니다.

JLabel은 기본적으로 편집 기능을 제공하지 않지만, CardLayoutJTextField를 조합하면 클릭 시 편집 모드로 전환되는 편집 가능한 레이블을 손쉽게 만들 수 있습니다. 핵심 아이디어는 다음과 같습니다.

- 마우스 커서가 JLabel 위에 진입하면(mouseEntered) 현재 텍스트를 JTextField에 복사한 뒤 카드를 전환하여 편집 상태로 바꿉니다.
- 마우스 커서가 JTextField에서 벗어나면(mouseExited) 수정된 텍스트를 JLabel에 반영하고 다시 레이블 화면으로 되돌아갑니다.

이렇게 하면 사용자에게는 하나의 요소처럼 보이면서도, 필요할 때만 텍스트를 수정할 수 있는 직관적인 UI를 구현할 수 있습니다.

예제 코드

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.text.*;
public class JEditableLabel extends JFrame {
   public JEditableLabel() {
      setTitle("JEditableLabel");
      setLayout(new FlowLayout());
      final JLabel label = new JLabel(" Welcome to Tutorials Point");
      final JTextField textfield = new JTextField();
      final CardLayout cl = new CardLayout();
      final JPanel panel = new JPanel(cl);
      panel.add(label, "label component");
      panel.add(textfield, "textfield component");
      add(panel);
      label.addMouseListener(new MouseAdapter() {
         public final void mouseEntered(MouseEvent evt) {
            textfield.setText(label.getText());
            cl.show(panel, "textfield component");
         }
      });
      textfield.addMouseListener(new MouseAdapter() {
         public final void mouseExited(MouseEvent evt) {
            label.setText(textfield.getText());
            cl.show(panel, "label component");
         }
      });
      setSize(375, 250);
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      setLocationRelativeTo(null);
      setVisible(true);
   }
   public static void main(String[] args) {
      new JEditableLabel();
   }
}

위 코드에서는 JPanel에 CardLayout을 적용해 JLabel과 JTextField 두 개의 컴포넌트를 겹쳐 놓고, MouseAdapter의 이벤트에 따라 두 컴포넌트 사이를 전환합니다. 이를 통해 레이블이 마치 인라인 편집이 가능한 것처럼 동작하게 됩니다.

실행 결과

Java에서 편집 가능한 JLabel을 구현하는 방법