2012-03-10 67 views
6

Tôi có JTable sau đó sử dụng một mô hình bảng:Thiết tiêu đề cột trong JTable

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

Thay vì sử dụng, A, B, C, D, vv làm thế nào tôi có thể xác định tên bảng của riêng tôi. Đây là mã của tôi

Đây là mã cho mô hình bảng của tôi, khung tạo đối tượng từ mô hình bảng này và hiển thị nó trong 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); 

    } 
} 

Trả lời

9

Không chắc thế nào tốt điều này là nhưng bạn có thể sử dụng DefaultTableModel thay vì AbstractTableModel, kéo dài AbstractTableModel.

Đây là đoạn mã ví dụ mục đích:

gói 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); 
    } 

} 

Đây là kết quả:

TABLE WITH COLUMN NAMES

+0

+1 cho đúng hướng bằng cách sử dụng DefaultTableModel :-) – mKorbel

5

Bạn phải triển khai getColumnName để làm như vậy.

thấy API

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

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

xin vui lòng chỉnh sửa mã của bạn với 1) setColumnNames(), mã nói về AbstractTableModel 2) colNames <> col – mKorbel

+0

@mKorbel tới 1) I don' t thấy lý do tại sao nó sẽ cải thiện ví dụ. 2) Vâng, tất nhiên colNames <> col. col là một chỉ mục, colNames là một mảng kết hợp cả hai trả về tên, whats điểm của bạn? (Xin lỗi nếu tôi không nhận được nó.) –

+1

tốt hơn sẽ được đọc mã OP và thêm [phương pháp (s)] (http://stackoverflow.com/a/6901508/714968), sau đó tôi sẽ up_vote của bạn câu trả lời ở đây, có thể suggerstion để sử dụng DefaultTableModelwill được tốt hơn cho OP (sau đó cả hai ý kiến ​​của tôi sẽ bị xóa) – mKorbel

Các vấn đề liên quan