JTable
私はtable.setAutoCreateRowSorter(true);
と設定しました。私の主な目的は、列の並べ替え順序にかかわらず、一番上に常にある行を持つことです。私がやった最初のことは、 "それ以外のもの"を意味するフラグを理解して、その項目を常に先頭にソートするように、セルデータ型のcompareTo
メソッドを変更することでした。残念なことに、これにより、列のソート順に応じて、指定された行が常に最上位に表示されるようになりました。のようになりました。したがって、並べ替え順序がである場合、の値が有効な値が,になるようにセルを設定する必要があります。私は列の並べ替え順序を取得する方法を見つけることができませんのみ問題です。 this pageでsetAutoCreateRowSorter(true)を使用しているときに列のソート順を取得しますか?
、1つの提案答えは
残念ながらif (myTable.getRowSorter().getSortKeys().get(column).getSortOrder == SortOrder.ASCENDING) {
...
}
のラインに沿って、常に getSortKeys()は空のリストを返します。だから私は正方形に戻ってきた。 RowSorterListenerを追加することも考えましたが、並べ替え順序が変更されたときではなく、並べ替えが変更されたときのリスナーに見えます。
助けが必要ですか?ありがとう!
編集:ここに私の問題の一部を示すコードです。 System.out.printlnに注意してください。結果は常にゼロです。私は列の行の並べ替え順序を取得したいと思いますが、存在しないようです。
package tablecolumn;
import java.awt.Dimension;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.swing.GroupLayout;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.RowSorter;
import javax.swing.SortOrder;
import javax.swing.table.AbstractTableModel;
public class Tablecolumn extends JFrame {
JScrollPane scroll;
JTable table;
MyTableModel model;
static String[] columnnames = new String[] {"A", "B", "C"};
public class MyTableModel extends AbstractTableModel {
public List<List<String>> entries;
MyTableModel() {
entries = new ArrayList<List<String>>();
for (int i=0; i<5; i++) {
List<String> cols = new ArrayList<String>();
cols.add("X" + i);
cols.add("Y" + i);
cols.add("Z" + i);
entries.add(cols);
}
}
@Override
public int getRowCount() {
return entries.size();
}
@Override
public int getColumnCount() {
return columnnames.length;
}
@Override
public Object getValueAt(int r, int c) {
List<? extends RowSorter.SortKey> rsk = table.getRowSorter().getSortKeys();
System.out.println(rsk.size());
return entries.get(r).get(c);
}
@Override
public Class getColumnClass(int c) {
return String.class;
}
@Override
public String getColumnName(int c) { return columnnames[c]; }
@Override
public boolean isCellEditable(int row, int col) { return false; }
}
public Tablecolumn() {
scroll = new JScrollPane();
model = new MyTableModel();
table = new JTable();
table.setModel(model);
table.setAutoCreateRowSorter(true);
table.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_ALL_COLUMNS);
table.getTableHeader().setReorderingAllowed(false);
table.setColumnSelectionAllowed(false);
table.setRowSelectionAllowed(true);
scroll.setViewportView(table);
scroll.setMinimumSize(new Dimension(200, 200));
scroll.setPreferredSize(new Dimension(800, 600));
GroupLayout layout2 = new GroupLayout(this.getContentPane());
this.setLayout(layout2);
layout2.setVerticalGroup(
layout2.createSequentialGroup()
.addComponent(scroll)
);
layout2.setHorizontalGroup(
layout2.createParallelGroup()
.addComponent(scroll)
);
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
pack();
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new Tablecolumn().setVisible(true);
}
});
}
}
問題が発生していることを示すコードを追加しましたが、行を先頭に保持するためのソリューションは含まれていません。 –