私はここで奇妙なことに走っています。 JTableセル内にJLabelを追加しようとしています。ラベルアイコンは、いくつかの基準に基づいて変更されることがあります。私はここから仕様書に沿ってダミープロジェクトを作成しました:http://javanepal.wordpress.com/2010/06/30/adding-jlabel-in-jtable/JTableセルにJLabelを追加するときに奇妙な動作が発生する
そしてそれはうまく動作します。
[javax.swing.JLabel[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=,
flags=8388608,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,
disabledIcon=,horizontalAlignment=LEADING,horizontalTextPosition=TRAILING,
iconTextGap=4,labelFor=,text=Row 1,Col1,verticalAlignment=CENTER,
verticalTextPosition=CENTER], whatever....]
コードはTableModelのために、このです:私は、オブジェクト[]を検査する場合、私はAbstractTableModelに代えてのDefaultTableModelから延びるようにするTableModelを変更し、現在の行を追加するとき、私はこれを取得
public class MyModel extends javax.swing.table.AbstractTableModel {
Object[][] row = {{new JLabel("Row 1 Col 1"), "Row 1 Col 2", "Row 1 Col3"},
{new JLabel("Row 2 Col 1"), "Row 2 Col 2", "Row 2 Col3"},
{new JLabel("Row 3 Col 1"), "Row 3 Col 2", "Row 3 Col3"},
{new JLabel("Row 4 Col 1"), "Row 4 Col 2", "Row 4 Col3"}};
Object[] col = {"Column 1", "Column 2", "Column 3"};
protected Vector<Object> data;
public void addRow(Object o[]) {
for (int i = 0; i < o.length; i++) {
if (o[i] == null) {
o[i] = new String();
}
}
data.addElement(o);
fireTableRowsInserted(data.size() - 1, data.size() - 1);
}
public MyModel() {
super();
data = new Vector<Object>();
//Adding rows
for (Object[] r : row) {
addRow(r);
}
}
@Override
public Class getColumnClass(int columnIndex) {
if (columnIndex == 0) {
return getValueAt(0, columnIndex).getClass();
} else {
return super.getColumnClass(columnIndex);
}
}
@Override
public int getColumnCount() {
// TODO Auto-generated method stub
return 0;
}
@Override
public int getRowCount() {
// TODO Auto-generated method stub
return 0;
}
@Override
public Object getValueAt(int arg0, int arg1) {
// TODO Auto-generated method stub
return null;
}
}
ここで
テストクラスのコードです:
public class MyTableTest extends JFrame {
public MyTableTest(String title) {
super(title);
showGUI();
}
public void showGUI() {
JTable table = new JTable();
table.setModel(new MyModel());//invoking our custom model
//loadMessages(table);
table.setDefaultRenderer(JLabel.class, new Renderer());// for the rendering of cell
JScrollPane jp = new JScrollPane(table);
getContentPane().add(jp);
setVisible(true);
setSize(500, 300);
}
public static void main(String[] args) {
MyTableTest t = new MyTableTest("Table Custom");
}
}
これがなぜ起こるか私は本当に困惑している、メッセージは非常に問題に関して明確化されていません。
ありがとうございます!
heheheは両方の答えを一緒に入れて、今すぐ貴重な答えになります。+1 – mKorbel
@mKorbel確かに。我々は両方のポイントを逃した(またはアップホールドを共有するためにそれを残した)ようです。あなたの答えは+1 – Robin
@Robinコードは、私が実際に使っているテーブルとサンプルのミックスで、ベッドに出る前にそれをやっていました。本当に疲れていて、実装されていないメソッドについては気にしませんでした。最初のポイントは絶対に正しいと私を解決に導く。レンダラーの列インデックスをチェックして、Stringの代わりにJLabelを返します。ありがとう! +1と正解: – AlejandroVK