Column Name in JTable

I am working on a program for a small store. When I click the "Report" button, it should show a table, for example, this:

enter image description here

Column names "A", "B" ... "N" must be the names of employees. But I can’t understand how. Here is my code:

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); } 

The employee and product varies depending on how much is introduced. Zero is how many products you are willing to sell.

+4
source share
4 answers

You should add getColumnName() to the TableModel:

 String[] employee = {"Employee 1", "Employee 2"}; @Override public String getColumnName(int index) { return employee[index]; } 

In your case, it could be:

 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]; } }; 

And here is a complete working example:

 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(); } } 
+12
source

Here is an example from the oracle site, you can load the names you want for your columns into an array, and then pass the array to 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); 

The resulting table is as follows:

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

JTables tutorial link: http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#data

+4
source

Try the following:

 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); } }` 
+1
source

This is more of a manual approach, but it works for me.

  JTabel TABLE = new JTable(); JTableHeader HEADER = TABLE.getTableHeader(); TableColumnModel TMC = HEADER.getColumnModel(); TableColumn TC = TMC.getColumn(0); TC.setHeaderValue("Person 1"); TableColumn TC1 = TMC.getColumn(1); TC1.setHeaderValue("Person 2"); HEADER.repaint(); TABLE.getTableHeader().repaint(); 
0
source

Source: https://habr.com/ru/post/1382333/


All Articles