我有一个jTable,它有一个像这样定义的表模型:
javax.swing.table.TableModel dataModel =
new javax.swing.table.DefaultTableModel(data, columns);
tblCompounds.setModel(dataModel);
Run Code Online (Sandbox Code Playgroud)
有谁知道如何清除其内容?就这样它返回一个空表?
JTable
当我们做一个fireTableDataChanged()
或fireTableRowsUpdated()
来自时,我们看到选择被清除TableModel
.
这是预期的,还是我们做错了什么?我没有看到JTable
关于清除/保留模型更新选择的(或其他相关类)的任何属性.
如果这是默认行为,是否有一种防止这种情况的好方法?也许某种方式在更新之前"锁定"选择并在之后解锁?
开发人员一直在尝试在更新之前保存选择并重新应用它.这有点慢.
这是Windows XP上的Java 1.4.2,如果这很重要的话.我们仅限于基于我们使用的某些供应商代码的版本.
我想将各个JComboBox放入JTable的每个单元格中.即.每个单元格的JComboBox内容并不相同.
我基本上希望能够只调用以下代码将一行JComboBox添加到JTable中.任何人有任何想法?谢谢
JComboBox cb1 = new JComboBox(...);
JComboBox cb2 = new JComboBox(...);
model.addRow(new Object[] {"Row name", cb1, cb2} );
JComboBox cb3 = new JComboBox(...);
JComboBox cb4 = new JComboBox(...);
model.addRow(new Object[] {"Row name 2", cb3, cb4} );
Run Code Online (Sandbox Code Playgroud)
我能找到的最接近的示例代码如下.但是对于单个列的JComboBox内容是相同的.不是我需要的解决方案.
TableColumn col = table.getColumnModel().getColumn(vColIndex);
col.setCellEditor(new MyComboBoxEditor(values));
Run Code Online (Sandbox Code Playgroud)
哪里
public class MyComboBoxEditor extends DefaultCellEditor {
public MyComboBoxEditor(String[] items) {
super(new JComboBox(items));
}
}
Run Code Online (Sandbox Code Playgroud) 对所选行的任何更改JTable
都会触发添加ListSelectionListener
两次是否正常?
是否有可能ListSelectionListener
只触发一次?
目前,JTable单元格在第一次单击时被选中,而在第二个单元格上则被编辑.
是否可以在第一次点击时直接编辑它?
这可能是之前提出的问题.我在帖子之前搜索了很多,但是找不到任何可接受的.
有人可以告诉我如何做到这一点.我只需要在单击单元格时得到一个下拉菜单,这样我就必须从中选择一个值(作为限制用户选择的方法).
如果有人可以帮助我,我相信它会帮助很多人.有很多类似的问题,但没有任何明确的答案.请回答一下细节.一个例子将非常感谢..
谢谢!
我试过这个:
public void removeSelectedFromTable(JTable from)
{
int[] rows = from.getSelectedRows();
TableModel tm= from.getModel();
while(rows.length>0)
{
((DefaultTableModel)tm).removeRow(from.convertRowIndexToModel(rows[0]));
rows = from.getSelectedRows();
}
from.clearSelection();
}
Run Code Online (Sandbox Code Playgroud)
但是,它有时会留下一个.可能是什么问题?
我有一个使用DefaultTableModel的JTable,我允许在用户点击列标题时进行排序.但是,当用户单击具有integer类型数据的列的标头时,它不能正确排序.它似乎是按String而不是整数类型排序.
这是我的代码中我实际将数据添加到表中的部分:
DefaultTableModel aModel = (DefaultTableModel) mainView.logEntryTable.getModel();
ResultSetMetaData rsmd; try {
mainView.logEntriesTableModel.setRowCount(0);
rsmd = rs.getMetaData();
int colNo = rsmd.getColumnCount();
while(rs.next()){
Object[] objects = new Object[colNo];
for(int i=0;i<colNo;i++){
objects[i]=rs.getObject(i+1);
}
aModel.addRow(objects);
count++;
}
mainView.logEntryTable.setModel(aModel);
mainView.logEntryTable.getColumnModel().getColumn(0).setMaxWidth(80);
Run Code Online (Sandbox Code Playgroud)
所以我试图覆盖该方法并最终得到:
@Override
public Class<?> getColumnClass(int columnIndex){
if( columnIndex == 0){
// Return the column class for the integer column
}else{
// Return the column class like we normally would have if we didn't override this method
}
return null;
}
};
Run Code Online (Sandbox Code Playgroud)
我以前从未覆盖过这个,我不太清楚我在这里做什么.
我正在制作一个带有文本字段的表格,您可以在其中输入单词来过滤表格.它有效,但我想要做的是能够用输入的单词过滤它,但忽略单词的情况.有没有办法在不创建自定义的情况下完成此操作RowFilter
?
您可以运行此SCCEE以查看我正在谈论的内容.我想能够输入usa
并且它将过滤USA
.
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.RowFilter;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;
public class TestTableSortFilter extends JApplet {
private String[] columnNames
= {"Country", "Capital", "Population in Millions", "Democracy"};
private Object[][] data = {
{"USA", "Washington DC", 280, true},
{"Canada", "Ottawa", 32, true},
{"United Kingdom", "London", 60, true},
{"Germany", "Berlin", 83, true},
{"France", "Paris", 60, true},
{"Norway", "Oslo", 4.5, …
Run Code Online (Sandbox Code Playgroud)