gpt4 book ai didi

java - JTable 行选择 - 没有触发事件,也没有显示蓝色

转载 作者:行者123 更新时间:2023-11-30 07:30:33 24 4
gpt4 key购买 nike

我有一个 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) myTable.changeSelection(row, column, false, false);

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

关于java - JTable 行选择 - 没有触发事件,也没有显示蓝色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7783427/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com