IrvineL
IrvineL

Reputation: 125

Header of JTable's column won't show

I am new to Java and need to make a blank table with column header only, but I am stuck at the column header, it won't appear, I have tried the answer in this link JTable won't show column headers (adding JScrollPane) but it won't work. This is my code:

void panelTabel(){
    JPanel panelTabel = new JPanel();
    panelTabel.setBackground(Color.white);
    panelTabel.setLayout(null);
    panelTabel.setBounds(0, 260, 1000, 455);

    JScrollPane scrollTabel = new JScrollPane();
    scrollTabel.setBackground(Color.white);
    scrollTabel.setLayout(null);
    scrollTabel.setBounds(5,5,990,340);

    Vector headerTabel = new Vector(2);
    headerTabel.addElement(new String("No."));
    headerTabel.addElement(new String("Kode Barang"));
    DefaultTableModel modelTabel = new DefaultTableModel(1, headerTabel.size());
    modelTabel.setColumnIdentifiers(headerTabel);

    JTable tabelBarang = new JTable();
    tabelBarang.setModel(modelTabel);
    tabelBarang.setBackground(Color.gray);
    tabelBarang.setBounds(5,5, 980, 330);
    scrollTabel.add(tabelBarang);

    panelTabel.add(scrollTabel);
    halaman.add(panelTabel);
}

And this is the output : Blank table with no column header

I know my question may be duplicate, but I am really new to java and don't know what I did wrong, can someone please tell me what am I missing ? Thank you so much.

Upvotes: 1

Views: 161

Answers (1)

Gilbert Le Blanc
Gilbert Le Blanc

Reputation: 51445

Here's a simple JTable GUI I created using your method.

JTable Example # 38593729

Here are the changes I made.

  1. I used a border layout on the JPanel that holds the JTable.

  2. I got rid of all null layouts and positioning statements. I did ask for a preferred size for the JPanel. After you actually add some data to the JTable, you can define the size of the JTable and remove the preferred size hint.

  3. I defined the JTable first, then the JScrollPane. Thanks to Andrew Thompson for his comment.

Here's the minimal, runnable example #38,593,729 of a JTable in a JPanel in a JFrame. I hope this example helps you, unlike the first 38,593,728 examples on the Internet.

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.util.Vector;

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

public class JTableSimpleExample implements Runnable {

    private JFrame frame;

    @Override
    public void run() {
        frame = new JFrame("JTable Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.add(panelTabel());
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    private JPanel panelTabel() {
        JPanel panelTabel = new JPanel();
        panelTabel.setLayout(new BorderLayout());
        panelTabel.setPreferredSize(new Dimension(400, 100));

        Vector<String> headerTabel = new Vector<>(2);
        headerTabel.addElement(new String("No."));
        headerTabel.addElement(new String("Kode Barang"));
        DefaultTableModel modelTabel = new DefaultTableModel(1, headerTabel.size());
        modelTabel.setColumnIdentifiers(headerTabel);

        JTable tabelBarang = new JTable(modelTabel);

        JScrollPane scrollTabel = new JScrollPane(tabelBarang);

        panelTabel.add(scrollTabel, BorderLayout.CENTER);
        return panelTabel;
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new JTableSimpleExample());
    }

}

Upvotes: 2

Related Questions