jTable
ブール値の列がある場所で、Glazedリストを使用しています。デフォルトでjTable
は、列がタイプのチェックボックスがレンダリングされますBoolean.Class
。艶をかけられたリストを使用すると、必要なチェックボックスを取得できません。チェックボックスを拡張してレンダリングDefaultTableCellRenderer
しましたが、チェックボックスが「クリック可能」ではないため、満足できません。
GLのよくある質問http://www.glazedlists.com/documentation/faqで私は見つけました:
* Q:ブールテーブルセルをチェックボックスでレンダリングするように指定するにはどうすればよいですか?何らかの理由で、Glazed ListsにはgetColumnClass()メソッドがありません。
A:列クラスを指定する必要がある場合は、通常のTableFormatクラスの代わりにAdvancedTableFormatインターフェイスを実装する必要があります。GlazedLists.tableFormat()ファクトリメソッドを使用している場合は、AdvancedTableFormat.getColumnClass()メソッドを適切に実装するためにベースオブジェクトのクラスを指定する必要があります。*
これを経験したことがありますか?例とのリンクは見つかりませんでした。よくある質問の重要なリンクが壊れています。
私はこれで試しました:
public class CheckBoxTableModel implements AdvancedTableFormat {
public Class getColumnClass(int column) {
if(column==4)
return Boolean.class;
else
return Object.class;
}
}
助けてください!
編集:私はこれで試しました、jtableのフォームは表示されません
private class TicketTableFormat implements AdvancedTableFormat<Ticket> {
private final String[] cols = new String[]{"Id", "From", "Subject", "Date", "Incomplete"};
public int getColumnCount() {
return cols.length;
}
public String getColumnName(int colId) {
return cols[colId];
}
public Class getColumnClass(int col) {
if (col == 4) {
return Boolean.class;
} else {
return Object.class;
}
}
public Object getColumnValue(Ticket ticket, int colId) {
switch (colId) {
case 0:
return ticket.getId();
case 1:
return ticket.getFrom();
case 2:
return ticket.getSubject();
case 3:
return ticket.getDate();
case 4:
return ticket.getIncomplete();
}
return null;
}
public boolean isEditable(Ticket e, int col) {
if (col < 4) {
return false;
} else {
return true;
}
}
public Ticket setColumnValue(Ticket e, Object o, int i) {
e.setB((Boolean) editedValue);
return e;
}
public Comparator getColumnComparator(int i) {
throw new UnsupportedOperationException("Not supported yet.");
}
}
私はこれでそれを呼びます:
TicketTableFormat tbFormat = new TicketTableFormat();
TicketsModel = new EventTableModel(textFilteredTickets, tbFormat);
ticketTable.setModel(TicketsModel);