Заголовок столбца JTable не будет отображаться - PullRequest
1 голос
/ 06 апреля 2020

Я новичок в Java и мне нужно создать пустую таблицу только с заголовком столбца, но я застрял в заголовке столбца, он не появится, я попытался ответить по этой ссылке JTable выиграл не показывать заголовки столбцов (добавляя JScrollPane), но это не будет работать. Это мой код:

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

И это вывод: Пустая таблица без заголовка столбца

Я знаю, что мой вопрос может быть повторен, но я действительно новичок в java и не знаю, что я сделал не так, может кто-нибудь сказать мне, что я пропустил? Большое вам спасибо.

1 Ответ

2 голосов
/ 06 апреля 2020

Вот простая JTable GUI, которую я создал, используя ваш метод.

JTable Example # 38593729

Вот изменения, которые я сделал.

  1. Я использовал макет границы на JPanel, который содержит JTable.

  2. Я избавился от всех нулевых макетов и операторов позиционирования. Я попросил предпочитаемый размер для JPanel. После того, как вы фактически добавили некоторые данные в JTable, вы можете определить размер JTable и удалить подсказку о предпочтительном размере.

  3. Сначала я определил JTable, а затем JScrollPane. Спасибо Эндрю Томпсону за его комментарий.

Вот минимальный, запускаемый пример # 38 593 729 JTable в JPanel в JFrame. Я надеюсь, что этот пример поможет вам, в отличие от первых 38 593 728 примеров на Inte rnet.

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

}
...