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

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

от jakayla , в категории: Java , 2 года назад

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

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

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

от steve , 2 года назад

@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, который устанавливает всплывающую подсказку, равную тексту ячейки. Для других столбцов используется рендерер по умолчанию.

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

от clifford , 10 месяцев назад

@jakayla 

Пример кода, который позволяет сделать всплывающую подсказку только для первого столбца в 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
47
48
49
50
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) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new MyTable();
            }
        });
   }
}


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