- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个 JXtable。我想防止对前 3 行进行排序。基本上,前 3 行应该始终在最前面,其余的应该根据它们的值进行排序。
SO 上有一个类似的问题,但我不确定如何真正将它应用到我的使用中 Sort ROW except last row
主要区别在于我使用的是 JXTable。有没有一种我缺少的简单方法可以做到这一点?
这是我的 JXtable 代码
jTable1 = new JXTable();
if (isClickable) {
jTable1.getTableHeader().setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
//set the sorter here
} else {
jTable1.setSortable(false);
}
最佳答案
好吧,我花了一些时间来尽我所能地完善它,但这是我的工作示例。
基本上,我制作了一个名为 ComparableWrapper
的包装器类,它实现了 Comparable,因此可以对每一列进行排序。对于表格模型,我添加了一个 setData(Object[][] data)
方法,该方法自动将所有数据值包装在 ComparableWrapper
中。 ComparableWrapper
构造函数中的 sorted
参数决定值是否应该正常排序,或者无论如何都保持在顶部。
您必须在几个地方手动更改列的类类型。不管怎样,这是我的 SSCCE:
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.table.AbstractTableModel;
import org.jdesktop.swingx.JXTable;
public class TableTest extends JFrame {
public TableTest() {
super("JXTable - first 3 rows aren't sorted");
setLayout(new BorderLayout());
MyTableModel model = new MyTableModel();
JXTable table = new JXTable();
table.setModel(model);
Object[][] initialData = {
{"Zoe", new Integer(26)},
{"Adam", new Integer(29)},
{"Trisha", new Integer(33)},
{"Reed", new Integer(20)},
{"John", new Integer(3)},
{"Kyle", new Integer(102)},
{"Billy Bob", new Integer(27)},
{"Sandra", new Integer(87)},
{"Steve", new Integer(50)},
{"Guy", new Integer(23)},
{"Kenzie", new Integer(25)},
{"Mary", new Integer(27)},
{"Sally", new Integer(12)},
{"Joe", new Integer(101)},
{"Billy", new Integer(44)},
{"Bob", new Integer(83)},
};
model.setData(initialData);
JScrollPane tableScroll = new JScrollPane(table);
add(tableScroll, BorderLayout.CENTER);
table.setFillsViewportHeight(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 600);
setVisible(true);
setLocationRelativeTo(null);
}
private class MyTableModel extends AbstractTableModel {
String[] columns = { "First Name", "Age" };
Object[][] data = {};
public void setData(Object[][] data) {
for (int i=0; i<data.length; i++) {
// Don't sort top 3 rows
boolean sorted = i < 3 ? false : true;
// Wrap each object so the sorting can be manipulated.
// Change these class types as needed.
data[i][0] = new ComparableWrapper<String>((String) data[i][0], sorted);
data[i][1] = new ComparableWrapper<Integer>((Integer) data[i][1], sorted);
}
this.data = data;
fireTableDataChanged();
}
@Override
public Class<?> getColumnClass(int col) {
return ComparableWrapper.class;
}
@Override
public int getColumnCount() {
return columns.length;
}
@Override
public int getRowCount() {
return data.length;
}
@Override
public Object getValueAt(int row, int col) {
return data[row][col];
}
@Override
public String getColumnName(int col) {
return columns[col];
}
}
private class ComparableWrapper<T> implements Comparable<ComparableWrapper<T>> {
private Comparable<T> object;
private boolean sorted;
public ComparableWrapper(Comparable<T> object, boolean sorted) {
this.object = object;
this.sorted = sorted;
}
@Override
public int compareTo(ComparableWrapper<T> o) {
if (object instanceof Comparable<?>) {
if (sorted && o.isSorted()) {
// Sort normally by default
return object.compareTo(o.getObject());
} else {
// If an un-sorted row is being compared, don't compare at all
return 0;
}
}
// Fallback
return 0;
}
public T getObject() {
return (T) object;
}
public boolean isSorted() {
return sorted;
}
@Override
public String toString() {
return object.toString();
}
}
public static void main(String[] args) {
new TableTest();
}
}
关于java - 防止对 jxtable 中的前 3 行进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22391531/
我试图根据某些行项目的值覆盖 JXTable 的突出显示颜色。这是一个示例,如果行项目值具有 getNumber() % 2 == 0,则突出显示为绿色。 . 它适用于 JTable,但对于 JXTa
我有一个带有自定义表格模型的 JXTable。我添加了 2 个带有自定义 HighlightPredicate 的 ColorHighlighter。 问题是当我单击列标题时,表对行进行排序,但荧光笔
我想我必须使用荧光笔,但我想不通。 最佳答案 Table Button Column显示了一种使用常规 JTable 执行此操作的方法。我假设它也适用于 JXTable。 关于java - 如何将按钮
我设置了一个 JXTable 以用某种颜色绘制选定的单元格。但是,只要选定的单元格位于顶行,就好像表格中的所有单元格都被绘制了一样。 谁能帮我理解为什么会出现这个问题,以及如何解决这个问题? 下面是演
我正在为应用程序编写一些 UI 持久性方法。我试图扩展到一个 JXTable,在表模型中有一组固定的 N 列。 我如何获取和设置 JXTable 中第 #k 列的以下信息,其中 k 是表模型顺序中的列
我正在使用 JXTable 来显示、过滤和排序一些数据。但是,我在排序时遇到了一些意想不到的行为。如您所见,值并未按预期升序,而是按字符串的排序方式排序。 为了处理评论,我确信此列在代码的正确部分(即
JTable 和 JXTables 有一个在滚动条上方生成的标题单元格。这是一个小单元格,但我想用它来渲染图标和弹出菜单。我如何访问此标题单元格? 谢谢 最佳答案 在JXTable中,要设置的属性是c
我想对表格进行初始排序。我尝试了以下代码: tableModel = createTableModel(model); rowSorter = new TableRowSorter<>(tableMo
信息 - 为了更好的格式化,我在整个帖子中使用了代码格式化。 Hi, I have a highlighted JXTable. Rows are highlighted, depending on
关于this thread我已经弄清楚如何将 JXDatePicker 添加到 JXTable(或 JTable)单元格中。但我现在有一个小问题。 DatePicker 弹出并根据我的需要正常工作。但
我正在使用 JXTable 显示记录列表。 当我单击“刷新”按钮时,我希望刷新 JXTable 以显示新插入的记录。 而且当我单击“添加新行”按钮时,必须将新行添加到 JXTable 中。 我怎样才能
我的 swing 应用程序中有一个 JXTable。当我在表格上按 ctrl+F 时,默认搜索面板将打开。 此面板仅查找子字符串。我需要找到与我的输入文本相似的单词。例如,我写“test”结果可能是“
我在对列进行排序后为某些行着色时遇到问题。我想为第 4 列等于零的每一行着色。这样我就重写了 prepareRenderer() 方法,如下所示: public Component prepareRe
我有一个自定义表模型,我想在一个 JXTable 中编辑其数据,但在第二个 JXTable 中仅供查看。这可以在没有两个独立模型的情况下完成吗?有什么方法可以覆盖仅供查看的表的 model.isCel
如何在双击时定位(在 JXTable 中)不同行中的特定列值以打开新框架? 我现在有这个代码: myTable.addMouseListener(new MouseAdapter() {
我希望能够像在 Excel 电子表格中一样卡住 JXTable 中的列,并遇到了这个项目:xframe-swing's JXTable . 只是想知道这个项目是否有教程。请注意,这与 swingx 项
我有一个JXTable,用户需要在其中引入数据,然后保存它。唯一的问题是,用户必须在保存之前取消选择最后编辑的单元格。如果不这样做,则不会保存该单元格的数据。 我唯一想到的就是在保存之前自动更改当前选
我想将我的 JTable 的状态存储在某种配置文件中(从技术上讲,我正在使用 JXTable 如果有帮助的话)。我的目标是,当用户运行我的电子表格程序时,其状态(即隐藏哪些列、列顺序)将在执行之间保持
我有一个JXTable,其中的模型是不同对象的List。在按所选列标题对 View 进行排序后,尝试将 View 索引映射到模型索引时出现问题。使用此代码, int[] selecteds = get
我的问题是如何使 JXTable 列(仅针对一个/特定列)的超链接像默认桌面 Web 浏览器的“_blank”链接一样操作。 我使用 JXTable 和 DefaultTableModel,我还从 s
我是一名优秀的程序员,十分优秀!