2011-11-21 134 views
4

我正在爲一家小商店開發一個程序。當我按一下按鈕「報告」,就必須表現出表,像這樣的:名稱JTable中的列

enter image description here

但是,列名「A」,「B」 ......「N」,必須是員工的姓名。但我無法弄清楚如何。 這是我的代碼:

public void Inform() 
{ 
    String[] employee; 
    String[] product[]; 
    this.setLayout(null); 

    Inform=new JTable(nulo, employee.length); 

    model = new DefaultTableModel() { 

      private static final long serialVersionUID = 1L; 

      @Override 
      public int getColumnCount() { 
       return 1; 
      } 

      @Override 
      public boolean isCellEditable(int row, int col) { 
       return false; 
      } 

      @Override 
      public int getRowCount() { 
       return Inform.getRowCount(); 
      } 
     }; 

     headerTable = new JTable(model); 

     for (int i = 0; i < Inform.getRowCount(); i++) 
      headerTable.setValueAt(product[i], i, 0); 


     headerTable.setShowGrid(false); 
     headerTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 
     headerTable.setPreferredScrollableViewportSize(new Dimension(50, 0)); 
     headerTable.getColumnModel().getColumn(0).setPreferredWidth(50); 

     scrollPane = new JScrollPane(Inform); 
     scrollPane.setRowHeaderView(headerTable); 
     scrollPane.setBounds(5,5,500,500); 
     scrollPane.setEnabled(false); 
     this.add(scrollPane); 


} 

員工和產品變量取決於輸入的人數。 nulo是有多少產品準備出售。

+0

請學習java命名約定並堅持下去他們 – kleopatra

回答

11

您應該添加getColumnName()在你的TableModel:

String[] employee = {"Employee 1", "Employee 2"}; 

@Override 
public String getColumnName(int index) { 
    return employee[index]; 
} 

在你的情況,這可能是:

model = new DefaultTableModel() { 

    private static final long serialVersionUID = 1L; 
    String[] employee = {"Employee 1", "Employee 2"}; 

    @Override 
    public int getColumnCount() { 
     return employee.length; 
    } 

    @Override 
    public boolean isCellEditable(int row, int col) { 
     return false; 
    } 

    @Override 
    public int getRowCount() { 
     return Inform.getRowCount(); 
    } 

    @Override 
    public String getColumnName(int index) { 
     return employee[index]; 
    } 
}; 

這裏是一個完全工作的例子:

import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.table.DefaultTableModel; 

public class TableNamesTest extends JFrame { 

    public TableNamesTest() { 
     DefaultTableModel model = new DefaultTableModel() { 
      String[] employee = {"emp 1", "emp 2"}; 

      @Override 
      public int getColumnCount() { 
       return employee.length; 
      } 

      @Override 
      public String getColumnName(int index) { 
       return employee[index]; 
      } 
     }; 

     JTable table = new JTable(model); 
     add(new JScrollPane(table)); 
     pack(); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setVisible(true); 
    } 

    public static void main(String[] args) { 
     new TableNamesTest(); 
    } 
} 
+0

但我怎樣才能使索引更改? – aerojun

+0

@aerojun:你的意思是?您無需調用由getable自動調用的getColumnName(),並使用getColumnCount()來查看錶中有多少列。 – Jonas

+0

public int getColumnName(int index){ return employee [index]; } 類型不匹配:不能從字符串轉換爲int – aerojun

4

下面是從Oracle網站的例子,你可以選擇你想要爲你的列名加載到一個數組,然後將數組傳遞到JTable

String[] columnNames = {"First Name", 
         "Last Name", 
         "Sport", 
         "# of Years", 
         "Vegetarian"}; 

//Then the Table is constructed using these data and columnNames: 

JTable table = new JTable(data, columnNames); 

結果表看起來是這樣的:

http://docs.oracle.com/javase/tutorial/figures/uiswing/components/TableSelection-new.png

鏈接教程JTable中:http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#data

+0

好,更快+1 – mKorbel

+0

謝謝,但這不是我正在尋找的模型。我想要它像上面顯示的圖像。 – aerojun

+0

@aerojun這是一個如何添加列名稱的示例,圖像只是爲了向您顯示列名已正確添加 –

1

試試這個:

import javax.swing.JFrame; 
import javax.swing.JTable; 
import javax.swing.JScrollPane; 
import javax.swing.SwingConstants; 
import javax.swing.table.DefaultTableCellRenderer; 
import javax.swing.table.TableColumn; 


public class Class1 extends JFrame{ 

static JTable table;  
static String[] Employees = {"Employee1","Employee2","Employee3","Employee4"}; 

static int NumberOfRows=4; 
static int NumberOfColumns=4; 




public static void main(String[] args){ 

table = new JTable(NumberOfRows,NumberOfColumns); 

for(int i=0;i<Employees.length;i++){ 

TableColumn tc = table.getColumnModel().getColumn(i); 
tc.setHeaderValue(Employees[i]); 

DefaultTableCellRenderer dtcr = new DefaultTableCellRenderer(); 
dtcr.setHorizontalAlignment(SwingConstants.CENTER); //For Aligning the Elements of all columns to CENTER 
tc.setCellRenderer(dtcr); 
} 


JFrame frame = new JFrame(); 
frame.add(new JScrollPane(table)); 
frame.setSize(300,300); 
frame.setVisible(true); 



}  

}` 
+4

請問你是否善意地解釋你的代碼?僅有代碼的答案通常不被接受,因爲它們不會讓那些橫跨他們的人留下。 –

+0

@WaiHaLee,我想他是指這種方法:http://stackoverflow.com/a/17655044/4828060 –