由于某些原因,我的JTable不会显示我的表模型中的标题。此外,我需要滚动窗格中的表,这似乎删除整个表。这是在Java Swing中。
package table;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.table.DefaultTableModel;
public class TableIcon extends JFrame{
public TableIcon(){
TableModel tableModel = new TableModel();
JTable table = new JTable(tableModel);
JScrollPane spTable = new JScrollPane();
spTable.add(table);
this.add( spTable);
this.add(table);
}
//spTable = new JScrollPane();
//spTable.add(table);
public static void main(String[] args)
{
TableIcon frame = new TableIcon();
frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
frame.pack();
frame.setVisible(true);
}
}
package table;
import javax.swing.table.AbstractTableModel;
/*** Class that sets up a table model for a downloaded batch***/
@SuppressWarnings("serial")
public class TableModel extends AbstractTableModel {
public TableModel() {
super();
}
@Override
public int getRowCount() {
return 5;
}
@Override
public int getColumnCount() {
return 2;
}
@Override
public String getColumnName(int column) {
if (column == 0) {
return "Record Number";
} else {
return "happy";
}
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
if (columnIndex == 0)
return rowIndex + 1;
else
return 3;
}
@Override
public void setValueAt(Object value, int rowIndex, int columnIndex) {
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
if (columnIndex == 0)
return false;
else
return true;
}
}
答案 0 :(得分:4)
您不应将组件添加到滚动窗格。而是设置视图。使用构造函数参数可以最简单地完成:
JScrollPane spTable = new JScrollPane(table);
this.add(spTable);
此外,删除此行,该表已在滚动窗格中:
this.add(table);
此外,最好只使用JFrame
,而不是扩展一个。最后,您应该在event dispatch thread。
答案 1 :(得分:2)
您应该使用像这样JScrollPane
的构造函数创建JTable
:
JScrollPane spTable = new JScrollPane(table);
this.add( spTable);
无需拨打spTable.add(table);
或this.add(table);
,因为spTable
已包含table
。