JTable won't show column headers

JavaSwingJtable

Java Problem Overview


I have the following code to instantiate a JTable: the table comes up with the right number of rows and columns, but there is no sign of the titles atop the columns.

public Panel1()
{
	int  nmbrRows;

    setLayout(null);
    setBackground(Color.magenta);
    Vector colHdrs;

    //create column headers

    colHdrs = new Vector(10);
    colHdrs.addElement(new String("Ticker"));

    // more statements like the above to establish all col. titles       

    nmbrRows = 25;
    DefaultTableModel tblModel = new DefaultTableModel(nmbrRows, colHdrs.size());
    tblModel.setColumnIdentifiers(colHdrs);

    scrTbl = new JTable(tblModel);
    scrTbl.setBounds(25, 50, 950, 600);
    scrTbl.setBackground(Color.gray);
    scrTbl.setRowHeight(23);    
    add(scrTbl);

//rest of constructor
...

}

Comparing this to other table-making code, I don't see any missing steps, but something must be absent.

Java Solutions


Solution 1 - Java

Put your JTable inside a JScrollPane. Try this:

add(new JScrollPane(scrTbl));

Solution 2 - Java

The main difference between this answer and the accepted answer is the use of setViewportView() instead of add().

How to put JTable in JScrollPane using Eclipse IDE:

  1. Create JScrollPane container via Design tab.
  2. Stretch JScrollPane to desired size (applies to Absolute Layout).
  3. Drag and drop JTable component on top of JScrollPane (Viewport area).

In Structure > Components, table should be a child of scrollPane. enter image description here

The generated code would be something like this:

JScrollPane scrollPane = new JScrollPane();
...
		
JTable table = new JTable();
scrollPane.setViewportView(table);

Solution 3 - Java

As said in previous answers the 'normal' way is to add it to a JScrollPane, but sometimes you don't want it to scroll (don't ask me when:)). Then you can add the TableHeader yourself. Like this:

JPanel tablePanel = new JPanel(new BorderLayout());
JTable table = new JTable();
tablePanel.add(table, BorderLayout.CENTER);
tablePanel.add(table.getTableHeader(), BorderLayout.NORTH);

Solution 4 - Java

	public table2() {
	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	setBounds(100, 100, 485, 218);
	setTitle("jtable");
	getContentPane().setLayout(null);

	String data[][] = { { "Row1/1", "Row1/2", "Row1/3" },
			{ "Row2/1", "Row2/2", "Row2/3" },
			{ "Row3/1", "Row3/2", "Row3/3" },
			{ "Row4/1", "Row4/2", "Row4/3" }, };

	String header[] = { "Column 1", "Column 2", "Column 3" };

	// Table
	JTable table = new JTable(data,header);

	
	// ScrollPane
	JScrollPane scrollPane = new JScrollPane(table);
	scrollPane.setBounds(36, 37, 407, 79);
	getContentPane().add(scrollPane);

   }

}

try this!!

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJohn R DonerView Question on Stackoverflow
Solution 1 - JavaErkan HaspulatView Answer on Stackoverflow
Solution 2 - JavasilverView Answer on Stackoverflow
Solution 3 - JavaTobias SjöbeckView Answer on Stackoverflow
Solution 4 - Javachaithra_aView Answer on Stackoverflow