Заголовок JTable не отображается до сих пор

1

Я посмотрел и обнаружил, что многие люди не кладут свой стол в scrollPane. Несмотря на то, что я вставляю свою таблицу в scrollPane, тогда в кадр все еще не отображается заголовок. Есть что-то еще, что мне не хватает? благодаря

public class Gui extends JFrame {

AbstractTableModel model;
JTable table; 



public void start(AbstractTableModel model) { 
    this.model = model;
    table=new JTable(model){
        @Override 
        public boolean isCellEditable(int arg0, int arg1) { 
            return false; 
        }

    }; 


    table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    TableColumn column = null;
        for (int i = 0; i < model.getColumnCount(); i++) {
            column = table.getColumnModel().getColumn(i);
            column.setPreferredWidth(120);
            column.setMaxWidth(300);
            column.setMinWidth(50);
        }    

        JScrollPane pane = new JScrollPane(table);  
        pane.setPreferredSize(new Dimension(900,900));

        add(pane); 
        setLayout(new FlowLayout()); 
        setVisible(true); 
        setDefaultCloseOperation(EXIT_ON_CLOSE); 
        pack();
}
  • 1
    Чтобы быстрее помочь, опубликуйте MCVE (Минимальный завершенный и проверяемый пример).
  • 0
    Не устанавливайте макет в FlowLayout. Поместите JScrollPane в BorderLayout, используя контейнер.
Показать ещё 3 комментария
Теги:
user-interface
swing
jtable

1 ответ

3
Лучший ответ

На основе вашего кода, а затем, чтобы добавить недостающую функциональность, вы работаете с кодом...

Изображение 174551

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import javax.swing.JFrame;
import static javax.swing.JFrame.EXIT_ON_CLOSE;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;

public class Gui extends JFrame {

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                Gui frame = new Gui();
                frame.start(new DefaultTableModel(new Object[]{"A", "B", "C"}, 10));
            }
        });
    }

    AbstractTableModel model;
    JTable table;

    public void start(AbstractTableModel model) {
        this.model = model;
        table = new JTable(model) {
            @Override
            public boolean isCellEditable(int arg0, int arg1) {
                return false;
            }

        };

        table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
        TableColumn column = null;
        for (int i = 0; i < model.getColumnCount(); i++) {
            column = table.getColumnModel().getColumn(i);
            column.setPreferredWidth(120);
            column.setMaxWidth(300);
            column.setMinWidth(50);
        }

        JScrollPane pane = new JScrollPane(table);
        pane.setPreferredSize(new Dimension(900, 900));

        add(pane);
        setLayout(new FlowLayout());
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        pack();

    }
}

Это приводит к двум широким предположениям...

  1. В TableModel нет столбцов
  2. В TableModel нет имен столбцов...

Например, TableModel без имен столбцов...

Изображение 174551

Лично...

  • Я бы не использовал FlowLayout для этого, BorderLayout даст лучшие результаты
  • pack рамку, прежде чем сделать ее видимой
  • Установите макет, прежде чем добавлять компоненты, как иногда, вещи могут быть испорчены...

Например...

setLayout(new FlowLayout()); // But I'd use a 'BorderLayout'
add(pane);
setDefaultCloseOperation(EXIT_ON_CLOSE);
pack();
setVisible(true);
  • 0
    эй, я заставил это работать. Проблема была в том, что я путал себя между заголовком. Поскольку данные на самом деле имеют несколько заголовков, следовательно, я рассматривал заголовки как строки. Следовательно, технически здесь не должно быть никаких заголовков столбцов, а просто A, B, C ... вроде листа Excel.
  • 1
    table.setPreferredScrollableViewportSize (table.getPreferredSize ());

Ещё вопросы

Сообщество Overcoder
Наверх
Меню