4
我想在另一個JTable的列(使用CellRenderer)內嵌套一個JTable。如何在JTable內部呈現JTable?
實施例(錯誤)輸出:
爲什麼下面的例子不是表內輸出一個表?
import java.awt.Component;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableCellRenderer;
public class Test {
public static void main(String[] args) {
JTable table = new JTable(new CustomTableModel());
table.setDefaultRenderer(Person.class, new CustomRenderer());
JPanel panel = new JPanel();
panel.add(new JScrollPane(table));
JFrame frame = new JFrame();
frame.setContentPane(panel);
frame.pack();
frame.setVisible(true);
}
}
@SuppressWarnings("serial")
class CustomTableModel extends AbstractTableModel {
@Override
public int getColumnCount() {
return 2;
}
@Override
public int getRowCount() {
return 1;
}
@Override
public Object getValueAt(int row, int col) {
if (col == 0) {
return new Person("Bob");
} else {
return "is awesome!";
}
}
}
@SuppressWarnings("serial")
class CustomRenderer extends JPanel implements TableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int col) {
JTable t = new JTable(new CustomTableModel());
add(new JScrollPane(t));
return this;
}
}
class Person {
public String name = "";
public Person(String name) {
this.name = name;
}
}
我會嘗試滾動窗格,但w.r.t.沒有返回這個 - 我認爲最好的做法是僅將渲染器的主要組件實例化一次。編輯:我仍然收到一個沒有滾動窗格的字符串值 - 我會上傳一個截圖。 – sdasdadas 2013-02-15 21:39:47
如果可以縮短數量(如果短暫對象),但是,在每次交互中創建JTable則更好 – MadProgrammer 2013-02-15 21:45:00
這是事實,但由於滾動窗格不阻止顯示JTable,因此這些是次要的。 – sdasdadas 2013-02-15 21:46:30