class Personal_model extends DefaultTableModel{
Personal_model(String[][] s,String[] i){
super(s,i);
}
@Override
public Class<?> getColumnClass(int columnIndex){
if (columnIndex!=2)
return String.class;
else
return Integer.class;
}
}
modeltable = new Personal_model(data,col);
table = new JTable(modeltable);
table.setRowSorter(new TableRowSorter<Personal_model>(modeltable));
1)请阅读关于包含TableRowSorter示例的JTable的教程,关于RowSorter的问题必须在您的代码中
2)默认情况下,您可以对ColumnClass使用以下定义,
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
3)或者可以硬编码
@Override
public Class<?> getColumnClass(int colNum) {
switch (colNum) {
case 0:
return Integer.class;
case 1:
return Double.class;
case 2:
return Long.class;
case 3:
return Boolean.class;
case 4:
return String.class;
case 5:
return Icon.class;
default:
return String.class;
}
}
import com.sun.java.swing.Painter;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics2D;
import java.util.ArrayList;
import java.util.List;
import javax.swing.*;
import javax.swing.table.*;
public class JTableSortingIconsForNimbus extends JFrame {
private static final long serialVersionUID = 1L;
private JTable table;
private JTable table1;
private static Icon ascendingSortIcon;
private static Icon descendingSortIcon;
public JTableSortingIconsForNimbus() {
Object[] columnNames = {"Type", "Company", "Shares", "Price"};
Object[][] data = {
{"Buy", "IBM", new Integer(1000), new Double(80.50)},
{"Sell", "MicroSoft", new Integer(2000), new Double(6.25)},
{"Sell", "Apple", new Integer(3000), new Double(7.35)},
{"Buy", "Nortel", new Integer(4000), new Double(20.00)}
};
DefaultTableModel model = new DefaultTableModel(data, columnNames) {
private static final long serialVersionUID = 1L;
@Override
public Class getColumnClass(int column) {
return getValueAt(0, column).getClass();
}
};
table = new JTable(model) {
private static final long serialVersionUID = 1L;
@Override
public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
Component c = super.prepareRenderer(renderer, row, column);
int firstRow = 0;
int lastRow = table.getRowCount() - 1;
if (row == lastRow) {
((JComponent) c).setBackground(Color.red);
} else if (row == firstRow) {
((JComponent) c).setBackground(Color.blue);
} else {
((JComponent) c).setBackground(table.getBackground());
}
return c;
}
};
table.setPreferredScrollableViewportSize(table.getPreferredSize());
JScrollPane scrollPane = new JScrollPane(table);
add(scrollPane, BorderLayout.NORTH);
table1 = new JTable(model) {
private static final long serialVersionUID = 1L;
@Override
public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
Component c = super.prepareRenderer(renderer, row, column);
int firstRow = 0;
int lastRow = table1.getRowCount() - 1;
if (row == lastRow) {
((JComponent) c).setBackground(Color.red);
} else if (row == firstRow) {
((JComponent) c).setBackground(Color.blue);
} else {
((JComponent) c).setBackground(table1.getBackground());
}
return c;
}
};
table1.setPreferredScrollableViewportSize(table1.getPreferredSize());
JScrollPane scrollPane1 = new JScrollPane(table1);
//UIDefaults nimbusOverrides = new UIDefaults();
//nimbusOverrides.put("Table.ascendingSortIcon", ascendingSortIcon);
//nimbusOverrides.put("Table.descendingSortIcon", descendingSortIcon);
//table1.putClientProperty("Nimbus.Overrides", nimbusOverrides);
//UIManager.getLookAndFeelDefaults().put("Table.ascendingSortIcon", ascendingSortIcon);
//UIManager.getLookAndFeelDefaults().put("Table.descendingSortIcon", descendingSortIcon);
UIManager.getLookAndFeelDefaults().put("TableHeader[Enabled].ascendingSortIconPainter",
new FillPainter1(new Color(255, 255, 191)));
UIManager.getLookAndFeelDefaults().put("TableHeader[Enabled].descendingSortIconPainter",
new FillPainter1(new Color(191, 255, 255)));
SwingUtilities.updateComponentTreeUI(table1);
add(scrollPane1, BorderLayout.SOUTH);
TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(table.getModel()) {
@Override
public void toggleSortOrder(int column) {
if (column >= 0 && column < getModelWrapper().getColumnCount() && isSortable(column)) {
List<SortKey> keys = new ArrayList<SortKey>(getSortKeys());
if (!keys.isEmpty()) {
SortKey sortKey = keys.get(0);
if (sortKey.getColumn() == column && sortKey.getSortOrder() == SortOrder.DESCENDING) {
setSortKeys(null);
return;
}
}
}
super.toggleSortOrder(column);
}
};
table.setRowSorter(sorter);
table1.setRowSorter(sorter);
}
static class FillPainter1 implements Painter<JComponent> {
private final Color color;
public FillPainter1(Color c) {
color = c;
}
@Override
public void paint(Graphics2D g, JComponent object, int width, int height) {
g.setColor(color);
g.fillRect(0, 0, width - 1, height - 1);
}
}
public static void main(String[] args) {
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
ascendingSortIcon = UIManager.getLookAndFeelDefaults().getIcon("Table.ascendingSortIcon");
descendingSortIcon = UIManager.getLookAndFeelDefaults().getIcon("Table.descendingSortIcon");
UIManager.getLookAndFeelDefaults().put("TableHeader[Enabled].ascendingSortIconPainter",
new FillPainter1(new Color(127, 255, 191)));
UIManager.getLookAndFeelDefaults().put("TableHeader[Enabled].descendingSortIconPainter",
new FillPainter1(new Color(191, 255, 127)));
} catch (Exception fail) {
}
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JTableSortingIconsForNimbus frame = new JTableSortingIconsForNimbus();
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}
我有一个JTable,它有两列,文件名和日期都被修改了。我为第一列添加了name String,并为第二个dateTime列添加了。 我将dateTime列呈现为字符串。 我还启用了 编辑2 我已经测试并弄明白了。如果使用DefaultTableModel而不重写它的getColumnClass()方法,那么在使用Date或Number列时会遇到麻烦。
我想学习java中的比较器,我在网上找到了这个很好的例子,我的问题是如何更改这个代码,使宠物的名字按年龄和降序排列,以便最大的是第一个,最小的是最后一个?
问题内容: 如何使用单选按钮对jtable列进行排序? 我的jtable是defaultTableModel而不是向量。 当用户按下列标题时,我已经实现了,它将进行排序,现在我必须使用单选按钮来实现。 实现此目标的最佳方法是什么? 问题答案: 要以编程方式进行排序,请将以下代码添加到侦听器中:
问题内容: 我已经弄清楚了如何正确地对a 进行排序,但是当表单元发生更改时,我无法弄清楚如何自动更新排序顺序。现在,我有这段代码(很长),主要是基于Java教程的How to Use Tables中的代码 。我强调了我所做的更改。在这种情况下,新添加的值可以正确排序,但是当我进入编辑值时,即使我打电话给我,它似乎也没有采取任何措施。 简而言之,当模型中的数据值更改时,如何使表重新排序? 问题答案:
我有一个字符串数组,由整数作为键标识。我想按键对这个HashMap进行排序。
问题内容: 我不知道是否为此问题选择了合适的标题(如果没有,请相应地更改它),但是请考虑以下我正在使用的简化表结构: ,,,,,都是不相关的整数/浮筒,它们都代表不同的因素,并可以具有数量级的非常不同的顺序( 范围可从1 - 10,而的范围可以从100 - 1000 )。 我正在尝试选择条件相似的日期。给定一组,,,,,值我需要 返回由下令所有结果 接近 所有值作为一个整体 ,例如,如果,,,,和