Как использовать скрытые данные столбца jTable во всплывающей подсказке - PullRequest
1 голос
/ 02 апреля 2012

Я пытаюсь отобразить данные скрытого столбца в виде всплывающей подсказки. Сокрытие работает отлично, используя следующий код:

    JTable table = new JTable(model){
        //Implement table cell tool tips.          
        public String getToolTipText(MouseEvent e) {
            String tip = null;
            java.awt.Point p = e.getPoint();
            int rowIndex = rowAtPoint(p);
            int colIndex = columnAtPoint(p);
            int realColumnIndex = convertColumnIndexToModel(colIndex);

            try {
                tip = getValueAt(rowIndex, 8).toString();
            } catch (RuntimeException e1) {
                //catch null pointer exception if mouse is over an empty line
            }

            return tip;
        }
    };

    TableColumnModel tcm = table.getColumnModel();

    TableColumn tc;
    for(int i = 1; i <= 7; i++){
        tc = tcm.getColumn(8);
        tcm.removeColumn(tc);
    }

Но во всплывающей подсказке не отображаются данные скрытого столбца (функция getValue не возвращает значение). Так что, скрывая столбец, удаляете и данные?

1 Ответ

5 голосов
/ 02 апреля 2012
  1. Вам не нужно использовать цикл for, поскольку вы не используете переменную i; -)
  2. removeColumn для JTableне удаляет данные из модели, как четко указано в javadoc

    Удаляет aColumn из массива столбцов этого JTable.Примечание: этот метод не удаляет столбец данных из модели;он просто удаляет TableColumn, который отвечал за его отображение.

    В javadoc не упоминается тот же метод на TableColumnModel, но я предполагаю, что он работаеттаким же образом, но вы всегда можете попробовать вызвать его на JTable вместо

  3. Настоящая проблема в вашем коде - это использование getValueAt, которое используетиндекс строки и столбца таблицы, а не модели

    Примечание. Столбец указывается в порядке отображения табличного представления, а не в порядке столбцов TableModel.Это важное различие, потому что, когда пользователь переставляет столбцы в таблице, столбец с данным индексом в представлении будет меняться.Между тем действия пользователя никогда не влияют на порядок столбцов модели.

    И поскольку вы удалили этот столбец, он просто не существует для таблицы.Вместо этого вызовите метод getValue для модели и не забудьте преобразовать индекс строки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...