Swing中的JTable没有标题

时间:2015-04-12 18:30:42

标签: java swing jtable jscrollpane jtableheader

由于某些原因,我的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;
    }

} 

2 个答案:

答案 0 :(得分:4)

您不应将组件添加到滚动窗格。而是设置视图。使用构造函数参数可以最简单地完成:

JScrollPane spTable = new JScrollPane(table);
this.add(spTable);

此外,删除此行,该表已在滚动窗格中:

this.add(table);

此外,最好只使用JFrame,而不是扩展一个。最后,您应该在event dispatch thread

中创建GUI

答案 1 :(得分:2)

您应该使用像这样JScrollPane的构造函数创建JTable

JScrollPane spTable = new JScrollPane(table);
this.add( spTable);

无需拨打spTable.add(table);this.add(table);,因为spTable已包含table