Java JTable行选择-未触发事件且未显示蓝色

Java JTable行选择-未触发事件且未显示蓝色,java,swing,jtable,Java,Swing,Jtable,我有一个JTable,它只允许使用ListSelectionListener进行行选择,如下面的代码段所示。JTable中存在两个问题: Q1)尽管我使用setSelectionRow方法设置默认选择的第一行,但在程序启动时不会触发相关的listSelection事件。仅当我单击另一行而不是第一行时,才会触发事件-考虑到下面的代码,您认为我应该如何修复此问题 Q2)当我选择一行时,它在JTable中不是蓝色的。在我将ListSelectionListener引入JTable的选择模型之后,我注意

我有一个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);
(一)

2) 禁用setCellSelectionEnabled()和SetColumnSelectionLowed(),然后工作

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);
    }
}

import java.awt.*;
导入javax.swing.*;
导入javax.swing.table.*;
类选择列测试{
私有JTableHeader;
私有对象selectedColumn=null;
私有字符串[]列名称={“字符串”、“整数”、“布尔值”};
私有对象[][]数据={{“aaa”,12,真},{“bbb”,5,假},{“CCC”,92,真};
private TableModel model=新的DefaultTableModel(数据、列名){
私有静态最终长serialVersionUID=1L;
@凌驾
公共类getColumnClass(int列){
返回getValueAt(0,列).getClass();
}
};
专用JTable表=新JTable(模型);
公共JComponent makeUI(){
//table.setRowSelectionAllowed(真);
//table.setCellSelectionEnabled(假);
//table.setColumnSelectionAllowed(false);
JPanel p=newjpanel(newborderlayout());
p、 添加(新JScrollPane(表));
table.setPreferredScrollableViewportSize(table.getPreferredSize());
表.changeSelection(0,0,false,false);
返回p;
}
公共静态void main(字符串[]args){
invokeLater(新的Runnable(){
@凌驾
公开募捐{
createAndShowGUI();
}
});
}
公共静态void createAndShowGUI(){
JFrame f=新的JFrame();
f、 setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f、 getContentPane().add(新建SelectedColumnTest().makeUI());
f、 包装();
f、 setLocationRelativeTo(空);
f、 setVisible(真);
}
}

要更快地获得更好的帮助,请发布一个。