有什么方法可以让 JTable 的哪一列被排序,什么是排序方向?
谢谢。
我在jtable排序机制中找不到问题,当我在搜索代码中实现排序时,它给出了数组索引超出范围,填充表代码在初始阶段工作正常,但在搜索发生后它也被卡住了.
我的应用程序有一个文本字段区域,它接受从数据库搜索的关键字.现在搜索后,它会在jtable上显示它,我想为它提供表格分类器.任何帮助表示赞赏.thks.我还提供了下面的堆栈跟踪.
//问题代码
// for searching data from data base and display it in table
// according to the keyword typed.
private void jTextField1KeyPressed(java.awt.event.KeyEvent evt) {
System.out.println(evt.getKeyCode());
if(evt.getKeyCode() == KeyEvent.VK_ENTER){
jTable1.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null}
},
new String [] {
"cust_ID", "Title 2", "Title 3"
}
) {
boolean[] canEdit = new boolean [] {
false, false, false
};
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
});
jTable1.removeColumn(jTable1.getColumnModel().getColumn(0));
String query = "SELECT …
Run Code Online (Sandbox Code Playgroud) 在另一个线程中,我找到了这个比较器(post的底部),用于对JTable列进行排序,这些列可以由整数,字符串或两者组成.我无法弄清楚如何将它应用于我的JTable.我的表之前使用的是自动创建的行排序器.我将其设置为false,我现在正在使用:
TableRowSorter<MyTableModel> rowSorter = new TableRowSorter<MyTableModel>();
jtable.setRowSorter(rowSorter);
rowSorter.setComparator(0, c1);
Run Code Online (Sandbox Code Playgroud)
我得到一个索引超出范围的例外,说我提供的无效范围.我的表有多列.这是应用比较器的正确方法吗?我觉得这不是这样做的方法.
Comparator c1 = new java.util.Comparator() {
/**
* Custom compare to sort numbers as numbers.
* Strings as strings, with numbers ordered before strings.
*
* @param o1
* @param o2
* @return
*/
@Override
public int compare(Object oo1, Object oo2) {
boolean isFirstNumeric, isSecondNumeric;
String o1 = oo1.toString(), o2 = oo2.toString();
isFirstNumeric = o1.matches("\\d+");
isSecondNumeric = o2.matches("\\d+");
if (isFirstNumeric) {
if (isSecondNumeric) {
return Integer.valueOf(o1).compareTo(Integer.valueOf(o2));
} else {
return …
Run Code Online (Sandbox Code Playgroud) 我无法使以下Swing表视图可以排序.虽然我确实在列标题翻转时得到了小三角形,但是根据排序状态,表内容不会有任何不同的刷新:
import scala.swing._
val data = Array(
Array("a", 4, 8.9),
Array("b", 7, 2.3),
Array("c", 1, 5.6)
).map(_.map(_.asInstanceOf[AnyRef]))
val m = new javax.swing.table.DefaultTableModel(data,
Array[AnyRef]("string", "int", "double")) {
override def getColumnClass(c: Int): Class[_] = c match {
case 0 => classOf[java.lang.String ]
case 1 => classOf[java.lang.Integer]
case 2 => classOf[java.lang.Double ]
}
}
val t = new Table
t.model = m
t.peer.setAutoCreateRowSorter(true)
new Frame {
contents = new ScrollPane(t)
pack().centerOnScreen()
open()
}
Run Code Online (Sandbox Code Playgroud)
我用不同的外观(截图显示Nimbus)和JDK(OpenJDK 6,OpenJDK 7)测试了这个.此外,我有一个自定义的树表组件,没有问题排序,所以错误必须在上面的某处.
是否可以获得一些如何获得与非过滤表相对应的选择索引?
使用regexFilter过滤表后.JTable getSelectedRow返回过滤表的索引?
我们使用JTable显示数据以及状态(新建,已处理,已关闭).每个状态行都有不同的颜色,这是通过重载JTable的prepareRenderer()来实现的.
现在我们需要对该表进行排序,我们正在使用table.setAutoCreateRowSorter(true); 实现这一目标.行正确排序,但行的颜色保持不变.我们需要根据状态列在此操作之后将颜色重新应用于所有行.
我想知道什么是实现这一目标的最佳方法.我可以通过以下几种方式思考:
我不知道该怎么做.任何人都可以提供一个洞察力,了解实现这一目标的正确方法是什么?
我目前正在将JTable与TableRowSorter结合使用,以为用户实现搜索功能。下面是我的代码
tblDutyList = new JTable() {
@Override
public java.awt.Component prepareRenderer(
TableCellRenderer renderer, int row, int col) {
java.awt.Component comp = super.prepareRenderer(renderer, row,
col);
Object value = getModel().getValueAt(row, 4);
if (value.equals("Inactive")) {
comp.setBackground(Color.white);
comp.setForeground(Color.GRAY);
} else {
if (tblDutyList.isCellSelected(row, col)) {
comp.setBackground(Color.lightGray);
comp.setForeground(Color.BLACK);
} else
comp.setBackground(Color.white);
comp.setForeground(Color.BLACK);
}
return comp;
}
};
tblDutyList.setFillsViewportHeight(true);
String dutyId = "0", dutyName = "", dutyDesc = "", dutySectorName = "", dutyStatus = "", dutyRemoveReason = "";
Duty d = new Duty(Integer.parseInt(dutyId), dutyName, dutyDesc,
dutySectorName, dutyStatus, …
Run Code Online (Sandbox Code Playgroud) 我正在通过 Java 查询 MySQL 数据库,从结果集中提取数据并将其放入 DefaultTableModel,然后放入 JTable,然后放入 JScrollPane 以显示。
在 JTable 中,我通过在表中启用排序
table.setAutoCreateRowSorter(true);
Run Code Online (Sandbox Code Playgroud)
但是,如果我要排序的行中的单元格不是 String 类,那么我会收到 java.lang.ClassCastException。我的表中的数据具有以下类:
java.sql.Date
java.sql.Time
java.lang.Double
java.lang.Boolean
java.lang.String
Run Code Online (Sandbox Code Playgroud)
下面是当我尝试对 java.lang.Double 类的列进行排序时遇到的错误,然后是将结果集作为输入输出 JTable 的类。如果有人对我如何解决排序问题有任何想法,将不胜感激。
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.Double `enter code here`cannot be cast to java.lang.String
at java.text.Collator.compare(Collator.java:327)
at javax.swing.DefaultRowSorter.compare(DefaultRowSorter.java:968)
at javax.swing.DefaultRowSorter.access$100(DefaultRowSorter.java:112)
at javax.swing.DefaultRowSorter$Row.compareTo(DefaultRowSorter.java:1376)
at javax.swing.DefaultRowSorter$Row.compareTo(DefaultRowSorter.java:1366)
at java.util.ComparableTimSort.countRunAndMakeAscending(ComparableTimSort.java:290)
at java.util.ComparableTimSort.sort(ComparableTimSort.java:157)
at java.util.ComparableTimSort.sort(ComparableTimSort.java:146)
at java.util.Arrays.sort(Arrays.java:472)
at javax.swing.DefaultRowSorter.sort(DefaultRowSorter.java:607)
at javax.swing.DefaultRowSorter.setSortKeys(DefaultRowSorter.java:319)
at javax.swing.DefaultRowSorter.toggleSortOrder(DefaultRowSorter.java:480)
at javax.swing.plaf.basic.BasicTableHeaderUI$MouseInputHandler.mouseClicked(BasicTableHeaderUI.java:112)
at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:270)
at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:269)
at java.awt.Component.processMouseEvent(Component.java:6508)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861) …
Run Code Online (Sandbox Code Playgroud)