Как сделать всплывающую подсказку только для 1-ого столбца в jtable?

Пользователь

от jakayla , в категории: Java , 8 месяцев назад

Как сделать всплывающую подсказку только для 1-ого столбца в jtable?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от steve , 7 месяцев назад

@jakayla 

Вы можете использовать рендереры ячеек (cell renderer) в JTable для отображения всплывающей подсказки только для первого столбца. Вот пример кода:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import javax.swing.*;
import javax.swing.table.*;

public class MyTable extends JFrame {
   public MyTable() {
      super("JTable Cell Tooltip");

      Object[][] data = {
            {"1", "One", "I"},
            {"2", "Two", "II"},
            {"3", "Three", "III"}
      };

      String[] columnNames = {"#", "Word", "Roman Numeral"};

      DefaultTableModel model = new DefaultTableModel(data, columnNames);
      JTable table = new JTable(model) {
         public TableCellRenderer getCellRenderer(int row, int column) {
            if (column == 0) {
               return new DefaultTableCellRenderer() {
                  public java.awt.Component getTableCellRendererComponent(JTable table, Object value,
                        boolean isSelected, boolean hasFocus, int row, int column) {
                     java.awt.Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
                     if (c instanceof JLabel) {
                        JLabel l = (JLabel) c;
                        l.setToolTipText(l.getText());
                     }
                     return c;
                  }
               };
            }
            return super.getCellRenderer(row, column);
         }
      };
      JScrollPane scrollPane = new JScrollPane(table);

      getContentPane().add(scrollPane);
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      setSize(400, 200);
      setVisible(true);
   }

   public static void main(String[] args) {
      new MyTable();
   }
}


В этом примере для первого столбца установлен новый DefaultTableCellRenderer, который устанавливает всплывающую подсказку, равную тексту ячейки. Для других столбцов используется рендерер по умолчанию.