2011-11-21 129 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 –