[英]Java JTable set Selected row
I need to be able to set the selected row of a JTable.我需要能够设置 JTable 的选定行。
For exemple:举个例子:
I've already deal the listeners part but I can't find a way to force update the selected row...我已经处理了听众部分,但我找不到强制更新所选行的方法......
Does anyone have an idea?有人有想法吗?
Here a sample code for test:这里是测试的示例代码:
import javax.swing.JFrame;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.table.DefaultTableModel;
public class JTableTest extends JFrame {
public JTableTest() {
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
String[][] data = { { "Hello" }, { "World" } };
String[] columns = {"Column"};
JTable table = new JTable();
table.setModel(new DefaultTableModel(data, columns));
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
// table.setSelectedRow(1)
add(table);
setVisible(true);
pack();
}
public static void main(String[] args) {
new JTableTest();
}
}
You may also want to look at:您可能还想看看:
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
private DefaultTableModel model = new DefaultTableModel(new String[] {"1", "2", "3"}, 0);
private JTable table = new JTable(model);
public TestPane() {
setLayout(new BorderLayout());
add(new JScrollPane(table));
JButton add = new JButton("Add");
JButton remove = new JButton("Remove");
JPanel actions = new JPanel(new GridBagLayout());
actions.add(add);
actions.add(remove);
add.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String base = Character.toString('A' + model.getRowCount());
String[] rowData = new String[model.getColumnCount()];
for (int index = 0; index < model.getColumnCount(); index++) {
rowData[index] = base + (index + 1);
}
model.addRow(rowData);
int rowIndex = table.convertRowIndexToView(model.getRowCount() - 1);
table.getSelectionModel().clearSelection();
table.getSelectionModel().addSelectionInterval(rowIndex, rowIndex);
}
});
remove.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
List<Integer> rows = new ArrayList<>(8);
for (int row : table.getSelectedRows()) {
int modelRow = table.convertRowIndexToModel(row);
rows.add(modelRow);
}
if (rows.isEmpty()) {
return;
}
Collections.sort(rows);
Collections.reverse(rows);
for (int row : rows) {
model.removeRow(row);
}
}
});
add(actions, BorderLayout.SOUTH);
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.