1

HTMLを使用してフォーマットされた文字列データを表示するJTableがあります。マウス ポインターの下のテキストに基づいてツール ヒントを表示する必要があります

ここに画像の説明を入力

「Line1」と「Line2」にマウスを合わせると、異なるツール ヒントを表示する必要があります。これを達成する方法はありますか、またはカスタムレンダラーを使用して各行をセルでレンダリングし、それに基づいてツールチップを表示する必要がありますか?

テーブルを作成するサンプルコードは次のとおりです。

package com.sample.table;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;

import javax.swing.*;

public class SampleTable {

private static void createAndShowGUI() {
    //Create and set up the window.
    JFrame frame = new JFrame("SampleTable");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    frame.getContentPane().add(createTablePanel(), BorderLayout.CENTER);

    //Display the window.
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
}

public static JPanel createTablePanel(){
    JPanel tablePanel = new JPanel();

    JTable table = createTable();
    table.setFillsViewportHeight(true);
    table.setRowHeight(45);
    addListener(table);

    JScrollPane scrollPane = new JScrollPane(table);
    scrollPane.setPreferredSize(new Dimension(300, 120));

    tablePanel.add(scrollPane);

    return tablePanel;
}

private static void addListener(JTable table) {
    table.addMouseMotionListener(new MouseMotionListener() {

        @Override
        public void mouseMoved(MouseEvent e) {
            if(e.getSource() instanceof JTable){
                JTable table = (JTable)e.getSource();

                table.setToolTipText("Some tooltip");
            }

        }

        @Override
        public void mouseDragged(MouseEvent e) {
            // do nothing

        }
    });

}

public static JTable createTable(){
    String[] columnNames = {"Column1", "Column2"};
    Object[][] data = {{"1", "<html>Line1<br/>Line2</html>"},
                        {"2", "<html>Line1<br/>Line2</html>"}};

    JTable table = new JTable(data, columnNames);

    return table;
}



public static void main(String[] args) {
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            createAndShowGUI();
        }
    });
}
}
4

1 に答える 1

3

あなたが返すgetToolTipText(MouseEvent)コンポーネントのメソッドをオーバーライドします。自分自身をレンダラー コンポーネントとして拡張して返すものを拡張するTableCellRenderer場合は、サブクラスで直接オーバーライドできます。DefaultTableCellRendererJLabel

マウス ポインタが使用している行を特定できるはずですMouseEvent#getPoint()JTextComponent#viewToModelまたは(の代わりに をレンダリングにJTextArea#getLineOfOffset使用している場合) を参照してください。JTextAreaJLabel

于 2012-04-27T15:00:01.927 に答える