简体   繁体   English

在JTable中设置列标题

[英]Setting column headers in JTable

I have the following JTable which uses a table model: 我有以下JTable使用表模型:

http://s17.postimage.org/7zfh3l4lr/Screen_Shot_2012_03_10_at_15_11_31.png http://s17.postimage.org/7zfh3l4lr/Screen_Shot_2012_03_10_at_15_11_31.png

Instead of using, A,B,C,D etc. how can I define my own table names. 而不是使用,A,B,C,D等我如何定义自己的表名。 This is my code 这是我的代码

Here is the code for my table model, the frame creates an object from this table model and displays it in a JFrame. 这是我的表模型的代码,框架从该表模型创建一个对象并将其显示在JFrame中。

package uk.ac.kcl.inf._4css1pra.spreadsheet;

import java.awt.Dimension;
import java.util.HashMap;
import java.util.Map;

import javax.swing.table.AbstractTableModel;

/**
 * @author imdad
 *
 */
public class Spreadsheet extends AbstractTableModel{

    private Map data = new HashMap();

    public int getColumnCount()
    {
        return 7;
    }

    /* (non-Javadoc)
     * @see javax.swing.table.TableModel#getRowCount()
     */
    public int getRowCount()
    {
        return 250;
    }

    public Object getValueAt(int row, int col)
    {
        return data.get(new Dimension(row, col));
    }

    public void setValueAt(Object data, int row, int col)
    {
        Dimension coord = new Dimension(row, col);
        this.data.put(coord, data);
        fireTableCellUpdated(row, col);

    }
}

Not sure how good this thing is but you can use DefaultTableModel instead of AbstractTableModel, which extends AbstractTableModel. 不知道这个东西有多好但你可以使用DefaultTableModel而不是AbstractTableModel,它扩展了AbstractTableModel。

Here is the code for example purpose : 以下是用于示例目的的代码:

package jtable; 包装jtable;

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()
    {
        ImageIcon backIcon = getImage("/images/bac.png");
        ImageIcon exitIcon = getImage("/images/exit.png");
        ImageIcon forwardIcon = getImage("/images/forward.png");

        String[] columnNames = {"Picture", "Description"};
        Object[][] data =
        {
            {backIcon, "BACK"},
            {exitIcon, "EXIT"},
            {forwardIcon, "FORWARD"},
        };

        DefaultTableModel model = new DefaultTableModel(data, columnNames);
        JTable table = new JTable( model )
        {
            //  Returning the Class of each column will allow different
            //  renderers to be used based on Class
            public Class getColumnClass(int column)
            {
                return getValueAt(0, column).getClass();
            }
        };
        ImageIcon icon = new ImageIcon(getClass().getResource("/images/appIcon.png"));
        //model.addRow(new Object[]{icon, "Text"});
        //model.addRow(data[0]);
        table.setPreferredScrollableViewportSize(table.getPreferredSize());

        JScrollPane scrollPane = new JScrollPane( table );
        getContentPane().add( scrollPane );
    }

    private ImageIcon getImage(String path)
    {
        java.net.URL url = getClass().getResource(path);
        if (url != null)
            return (new ImageIcon(url));
        else
        {
            System.out.println(url);
            return null;
        }
    }

    public static void main(String[] args)
    {
        try
        {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        TableIcon frame = new TableIcon();
        frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
        frame.pack();
        frame.setVisible(true);
    }

}

Here is the output : 这是输出:

表与列名称

You must implement getColumnName to do so. 您必须实现getColumnName才能执行此操作。

see API API

private String[] colNames = new String[] {"first", "second", "third"};

@Override
public String getColumnName(int col) {
    return colNames[col];
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM