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

Java에서 JTableHeader의 각 열에 툴팁(Tooltip)을 설정하는 방법

JTableHeaderJComponent 클래스의 하위 클래스입니다. JTable 객체를 생성하면 생성자가 새로운 JTableHeader 객체를 만들어 테이블 컴포넌트의 헤더를 관리합니다.

JTable은 테이블 헤더 컴포넌트의 JTableHeader 객체를 설정하는 setTableHeader() 메서드와, 해당 객체에 대한 참조를 반환하는 getTableHeader() 메서드를 제공합니다.

JTableHeader의 각 열에 툴팁 텍스트를 설정하려면 JTableHeader 클래스의 getToolTipText() 메서드를 재정의(오버라이드)하면 됩니다.

예제 코드

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;

public class JTableHeaderToolTipTest extends JPanel {
    private DefaultTableModel dmodel;
    private JTable table;
    private JScrollPane jsp;

    public JTableHeaderToolTipTest() {
        setLayout(new BorderLayout());
        String[] headers = {"Name", "Age", "Contact Number", "City"};
        String[] toolTips = {"Name of Emp", "Age of Emp", "Contact Number of Emp", "City of Emp"};
        dmodel = new DefaultTableModel(headers, 4);
        table = new JTable(dmodel);

        ToolTipHeader tooltipHeader = new ToolTipHeader(table.getColumnModel());
        tooltipHeader.setToolTipStrings(toolTips);
        table.setTableHeader(tooltipHeader);

        jsp = new JScrollPane(table);
        add(jsp, BorderLayout.CENTER);
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame("JTableHeaderToolTip Test");
        frame.getContentPane().add(new JTableHeaderToolTipTest(), BorderLayout.CENTER);
        frame.setSize(400, 250);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}

// JTableHeader의 각 열에 툴팁 텍스트를 설정하기 위한 구현 코드
class ToolTipHeader extends JTableHeader {
    String[] toolTips;

    public ToolTipHeader(TableColumnModel model) {
        super(model);
    }

    @Override
    public String getToolTipText(MouseEvent e) {
        int col = columnAtPoint(e.getPoint());
        int modelCol = getTable().convertColumnIndexToModel(col);
        String retStr;
        try {
            retStr = toolTips[modelCol];
        } catch (NullPointerException ex) {
            retStr = "";
        } catch (ArrayIndexOutOfBoundsException ex) {
            retStr = "";
        }
        if (retStr.length() < 1) {
            retStr = super.getToolTipText(e);
        }
        return retStr;
    }

    public void setToolTipStrings(String[] toolTips) {
        this.toolTips = toolTips;
    }
}

코드 설명

위 예제는 다음과 같은 방식으로 동작합니다.

1. ToolTipHeader 클래스 정의: JTableHeader를 상속받아 사용자 정의 헤더 클래스를 만듭니다.
2. getToolTipText() 재정의: 마우스 이벤트가 발생한 지점의 열 인덱스를 구한 뒤, convertColumnIndexToModel()로 모델 인덱스로 변환하여 해당 열의 툴팁 문자열을 반환합니다.
3. 예외 처리: NullPointerException과 ArrayIndexOutOfBoundsException을 처리하여 툴팁이 없는 경우 빈 문자열 또는 기본 툴팁을 반환하도록 합니다.
4. 헤더 교체: setToolTipStrings()로 툴팁 배열을 지정한 후, setTableHeader() 메서드를 통해 기존 헤더를 ToolTipHeader 객체로 교체합니다.

실행 결과

프로그램을 실행하면 테이블 헤더의 각 열 위에 마우스를 올렸을 때 해당 열에 설정된 툴팁이 화면에 표시됩니다.