Как выбрать столбец JTable в JDialog, выбрав заголовок

1

Изображение 174551

То, что я пытаюсь сделать с JDialog - это...

  1. Чтобы выбрать столбец JTable, щелкнув заголовок
  2. Чтобы проверить, какой столбец выбран пользователем
  3. Чтобы получить значение ячеек внутри столбца

Согласно этому сообщению и этой странице, можно будет выбрать столбец, щелкнув заголовок, установив JTableHeader.

Тем не менее, ни один из них, похоже, не применим к тому, что я пытаюсь сделать.

Прежде всего, я не знаю, где поставить JTableHeader. Вышеприведенные примеры, похоже, поставили его для инициализации, но я не вижу подходящего пространства для этого в своем кодировании.

По крайней мере, я знаю, что вторым примером является JPanel. Итак, чтобы JTableHeader в JDialog, JTableHeader нужно будет установить в совершенно другой позиции, поскольку initComponents() JDialog нельзя изменить вручную по умолчанию.

Кроме того, я не могу найти, как выбрать заголовок (в отличие от отдельных ячеек). Я предполагаю, что мне нужно установить JTableHeader заранее.

Наконец, я не вижу никакого способа определить, какой столбец выбран. По крайней мере, я нашел jTable.getValueAt(int, int), но этот метод, похоже, сделан для получения отдельной ячейки.

Теперь я подозреваю, что это невозможно с JTable и JDialog. Я был бы признателен, если бы вы дали понять.

Я добавляю часть initComponents() чтобы вы ее легко поняли.

private void initComponents() {

    //here are irrelevant codes
    jTable1 = new javax.swing.JTable();

    setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

    jLabel1.setFont(new java.awt.Font("MS UI Gothic", 3, 18)); // NOI18N
    jLabel1.setText("Choose level(s) or unit(s)");

    //irrelevant codes

    jTable1.setModel(new javax.swing.table.DefaultTableModel(
        new Object [][] {
            {"EN6", "EN3", "EN5", "IN1"},
            {"EN2", "EN3", null, "IN4"},
            {null, null, null, "IN1"},
            {null, null, null, "IN2"},

        new String [] {
            "EN2", "EN3", "EN5", "IN1"
        }
    ) {
        Class[] types = new Class [] {
            java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class
        };
public Class getColumnClass(int columnIndex) {
            return types [columnIndex];
        }
    });
//lots of lines, seem to be irrelevant
pack();
}
  • 0
    Я думаю, что вы ищете jTable1.getModel (). GetValueAt (x, y) и связанные функции.
  • 2
    выбор может быть установлен, есть варианты для выбора строки, столбца и ячейки
Теги:
swing
selection
jtable
jtableheader

2 ответа

1
Лучший ответ

"[...] можно было бы выбрать столбец, щелкнув заголовок, установив JTableHeader".

Основываясь на ваших требованиях, я не думаю, что вам нужно предоставить свой собственный заголовок таблицы, но вместо этого прикрепить MouseListener к умолчанию. Таким образом, используя модели выбора строк и столбцов, вы можете легко достичь своей цели.

отрывок

final JTable table = new JTable(tableModel);
table.setColumnSelectionAllowed(true);
table.getTableHeader().addMouseListener(new MouseAdapter() {
    @Override
    public void mouseClicked(MouseEvent e) {
        // Get the right column based on MouseEvent#getPoint()
        int columnIndex = table.columnAtPoint(e.getPoint());
        // Set this column as the selected one in the columns selection model
        table.getColumnModel().getSelectionModel().setSelectionInterval(columnIndex, columnIndex);
        // Set all the rows as the selected ones in the rows selection model
        table.getSelectionModel().setSelectionInterval(0, table.getRowCount() - 1);
        // Print the values in selected column
        for (int rowIndex = 0; rowIndex < table.getRowCount(); rowIndex++) {
            System.out.println(table.getValueAt(rowIndex, columnIndex));
        }
    }
});

Примечание. Не забудьте разрешить выбор столбцов.

Видеть:

0

Вы можете получить значение ячейки select, используя это. Но так ли вы хотите?

table.addMouseListener(new MouseAdapter() {
    @Override
    public void mouseClicked(MouseEvent arg0) {
        if (arg0.getClickCount() == 1) { // 1 : one click, 2 : double click, 3 : right click

            int column = table.getSelectedColumn();

            int row = table.getSelectedRow();
            String str = (String) table.getValueAt(row, column);

            int[] rows = table.getSelectedRows();
            String str2 = (String) table.getValueAt(rows[0], column);
        }
    }
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню