Возможна ли jtable строка в поле optionDialog

У меня есть Jtable.

Некоторые из ячеек содержат очень длинные строки, и попытаться прокрутить их влево и вправо сложно. Мой вопрос заключается в том, можно ли показать строку из JTable во всплывающем окне, например, поле типа showDialog (то есть, где выбранная строка организована в виде столбца).

Даже ссылка на учебник подойдет.

Я искал в Интернете, но я не думаю, что я действительно использую правильные ключевые слова, так как я получаю много вариантов щелчка правой кнопкой мыши.

Если это невозможно, есть ли другие предложения о том, как это сделать?

 Sebastian Zeki10 июн. 2016 г., 19:54
Вот это да. Это впечатляющая настойчивость. Теперь я добавил ответ на этот другой не связанный вопрос, но обходной путь работал так, что я был ленивым (я знаю, что такие, как я, должны быть ...) .)
 camickr10 июн. 2016 г., 19:44
where the selected row is organised as a column - не уверен, что это значит, но да, это возможно. Тем не менее, вы все еще не ответили на мой вопрос для вас, когда я ответил на один из ваших предыдущих вопросов:stackoverflow.com/a/37606317/131872.

Ответы на вопрос(3)

Решение Вопроса

Как показаноВот,JOptionPane фабричные методы будут отображатьObject прошло вmessage параметр. Если этоmessage это один столбецJTableВы можете переработать любой заказрендеры и редакторы которые были применены к исходной таблице.

В общих чертах,

ДобавитьListSelectionListener к вашему столу и получитеselectedRow.

Переберите модель таблицы и создайтеnewModel чьи строки являются столбцамиselectedRow.

СоздатьJTable newTable = new JTable(newModel).

Применяйте любые рендеры и редакторы не по умолчанию.

Пройтиnew JScrollPane(newTable) какmessage параметр по вашему выборуJOptionPane метод.

Начиная с этогопример, следующий слушатель отображает отображаемое диалоговое окно.

table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
    @Override
    public void valueChanged(ListSelectionEvent e) {
        int selectedRow = table.convertRowIndexToModel(table.getSelectedRow());
        if (selectedRow > -1) {
            DefaultTableModel newModel = new DefaultTableModel();
            String rowName = "Row: " + selectedRow;
            newModel.setColumnIdentifiers(new Object[]{rowName});
            for (int i = 0; i < model.getColumnCount(); i++) {
                newModel.addRow(new Object[]{model.getValueAt(selectedRow, i)});
            }
            JTable newTable = new JTable(newModel) {
                @Override
                public Dimension getPreferredScrollableViewportSize() {
                    return new Dimension(140, 240);
                }
            };
            // Apply any custom renderers and editors
            JOptionPane.showMessageDialog(f, new JScrollPane(newTable),
                rowName, JOptionPane.PLAIN_MESSAGE);
        }
    }
});
 trashgod12 июн. 2016 г., 00:14

Я хочу показать все значения в строке, каждое в их cel, упорядоченное по вертикали - это то, что я имел в виду под «в столбце».

Это должно быть в вопросе, а не в комментарии.

Для этого нет функции по умолчанию, но вы можете сделать это самостоятельно.

Вы можете создать JPanel (возможно, используя GridBagLayout) с двумя метками в строке для представления данных в столбце выбранной строки таблицы.

Для данных в первой метке вы бы использовалиgetColumnName(...) метод TableModel.

Для данных во втором ярлыке вы бы использовалиgetValueAt(...) метод TableModel.

Другой вариант - просто отобразить подсказку для ячейки. Смотрите раздел из учебника по Swing наУказание подсказок для ячеек для дополнительной информации.

 Sebastian Zeki11 июн. 2016 г., 22:15
ХОРОШО. Благодарю. Я пошел с ответом @ trashgod, но это также очень полезно

Вы можете использовать следующееListSelectionListener:

final JTable dialogTable =new JTable();     
table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
        @Override
        public void valueChanged(ListSelectionEvent event) {
            int selectedRow = table.getSelectedRow();
            if (selectedRow > -1) {
                int columnCount = table.getModel().getColumnCount();
                Object[] column = new Object[]{"Row "+(selectedRow+1)};
                Object[][] data = new Object[columnCount][1];
                for (int i = 0; i < columnCount; i++) {
                    Object obj = table.getModel().getValueAt(selectedRow, i);
                    data[i][0] = obj;
                }
                dialogTable.setModel(new DefaultTableModel(data, column));                  
                JOptionPane.showMessageDialog(null, new JScrollPane(dialogTable));
            }
        }
});

Это покажет диалоговое окно сообщения, которое содержитJTable с данными, полученными из выбранной строки. Надеюсь, это поможет вам.

 Sebastian Zeki10 июн. 2016 г., 19:55
Я хочу показать все значения в строке, каждое в их cel, упорядоченное по вертикали - это то, что я имел в виду под «в столбце». Я думаю, что этот код покажет мне только отдельное значение ячейки
 trashgod10 июн. 2016 г., 22:05
Почему неListSelectionListener вместоMouseListener?
 Sanjeev Saha11 июн. 2016 г., 03:58
@SebastianZeki Не могли бы вы взглянуть на мой ответ. Я отредактировал его в соответствии с вашими потребностями.
 trashgod12 июн. 2016 г., 00:20
@SanjeevSaha: Хороший улов на пустой выбор, но не забудьтеперевести координаты ячейки.

Ваш ответ на вопрос