Выбор строки JTable - событие не запускается и синий цвет не отображается - PullRequest
2 голосов
/ 16 октября 2011

У меня есть JTable, который позволяет выбирать строки только с использованием ListSelectionListener, как показано в приведенном ниже фрагменте кода.В JTable есть две проблемы:

Q1) Хотя я установил первую строку, выбранную по умолчанию, с помощью метода setSelectionRow, связанное событие listSelection не запускается при запуске программы.Событие вызывается только в том случае, если я щелкаю по другой строке, но не по первой. Как вы думаете, что мне следует сделать, чтобы исправить это, учитывая приведенный ниже код?

Q2) Когда я выбираю строку, это не так.окрашены в синий цвет в JTable.Я заметил, что это начало происходить после того, как я ввел ListSelectionListener в модель выбора JTable.Перед добавлением слушателя таблица делала этот цвет бизнеса, когда я выбрал строку. Как вы думаете, что мне следует сделать, чтобы исправить это, учитывая приведенный ниже фрагмент кода?Большое спасибо.

     jTableBookings = new javax.swing.JTable();

     jTableBookings.setModel(new MyBookingTableModel(bookingTableData));
     jTableBookings.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
     jTableBookings.setRowSelectionAllowed(true);
     jTableBookings.setCellSelectionEnabled(false);

     jTableBookings.setColumnSelectionAllowed(false);
     initColumnSizesForMinaBokBokningarJTable(jTableBookings);

     //QUESTION 1
     //Set selected row to first row for inital load.
     if (jTableBookings.getModel().getRowCount() > 0) {
         jTableBookings.setRowSelectionInterval(0, 0);
     }

     //QUESTION 2
     jTableBookings.getSelectionModel().addListSelectionListener(new   ListSelectionListener() {
     public void valueChanged(ListSelectionEvent e) {
           int sel = jTableBookings.getSelectedRow();
           fillBookingRecordFields(sel); //Here we do some business logic based on the selected row
     }
    });

    jScrollPane9.setViewportView(jTableBookings);

1 Ответ

4 голосов
/ 16 октября 2011

1) myTable.changeSelection (строка, столбец, ложь, ложь);

2) отключить setCellSelectionEnabled () и setColumnSelectionAllowed (), затем работает

enter image description here

import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;

class SelectedColumnTest {

    private JTableHeader header;
    private Object selectedColumn = null;
    private String[] columnNames = {"String", "Integer", "Boolean"};
    private Object[][] data = {{"aaa", 12, true}, {"bbb", 5, false}, {"CCC", 92, true}};
    private TableModel model = new DefaultTableModel(data, columnNames) {

        private static final long serialVersionUID = 1L;

        @Override
        public Class<?> getColumnClass(int column) {
            return getValueAt(0, column).getClass();
        }
    };
    private JTable table = new JTable(model);

    public JComponent makeUI() {
        //table.setRowSelectionAllowed(true);
        //table.setCellSelectionEnabled(false);
        //table.setColumnSelectionAllowed(false);
        JPanel p = new JPanel(new BorderLayout());
        p.add(new JScrollPane(table));
        table.setPreferredScrollableViewportSize(table.getPreferredSize());
        table.changeSelection(0, 0, false, false);
        return p;
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                createAndShowGUI();
            }
        });
    }

    public static void createAndShowGUI() {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        f.getContentPane().add(new SelectedColumnTest().makeUI());
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...