ヘッダーのテキストに従って、適切なテーブル サイズを取得する必要があります。「Po」、「Út」、「St」などのチェコ語の曜日名の略語が含まれています。ただし、この 3 つのドットの代わりに表示されます。
私はこのコードを持っています:
width, height- すべての最小行/列サイズの最大値
allWidth, allHeight- テーブル全体の幅と高さの合計
//GET DIMENSION
int width = 0;
int height = 0;
int allWidth, allHeight;
for (int col = 0; col < table.getColumnCount(); col++) {        
    TableColumn tableColumn = table.getTableHeader().getColumnModel().getColumn(col);
    TableCellRenderer renderer = tableColumn.getHeaderRenderer();
    if (renderer == null) {
        renderer = table.getTableHeader().getDefaultRenderer();
    }
    Component component = renderer.getTableCellRendererComponent(table,
            tableColumn.getHeaderValue(), false, false, -1, col);
    width = Math.max(component.getPreferredSize().width, width);
    table.getColumnModel().getColumn(col).setPreferredWidth(width);
}
allWidth = table.getColumnCount() * width;
for (int row = 0; row < table.getRowCount(); row++) {
    TableCellRenderer renderer = table.getCellRenderer(row, 0);
    Component comp = table.prepareRenderer(renderer, row, 0);
    height = Math.max(comp.getMinimumSize().height, height);
}
allHeight = table.getRowCount() * height;
//HERE I SET WIDTHS AND HEIGHTS
table.setRowHeight(height);
table.setMinimumSize(new Dimension(allWidth, allHeight));
scrollPane.setMinimumSize(new Dimension(allWidth, allHeight));
この設定で GridBagLayout を使用していますが、これで問題ないと思います。
this.setBorder(BorderFactory.createTitledBorder("Calendar"));
gbc.fill = GridBagConstraints.NONE;
gbc.gridx = 0;
gbc.gridy = 1;   //position x=0, y=0 is for JSpinners, months and years
gbc.weighty = 0;
gbc.weightx = 0;
add(scrollPane,gbc);//add table in a custom Calendar component
また、ルック アンド フィールを変更しました。これが 3 つのドットの原因です。それ以外の場合、名前は正しく表示されます。
try {
    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e) {
}
そして、これが私がJTableとJScrollPaneを初期化する方法です。これでも大丈夫だと感じています。
    setTable(new JTable());
    getTable().setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    getTable().setAutoscrolls(false);
    getTable().getTableHeader().setResizingAllowed(false);
    getTable().getTableHeader().setReorderingAllowed(false);
    getTable().setColumnSelectionAllowed(true);
    getTable().setRowSelectionAllowed(true);
    getTable().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    tableModel = new CalendarTableModel();  //my class extended from AbstractTableModel
    getTable().setModel(tableModel);
    scrollPane = new JScrollPane(table,JScrollPane.VERTICAL_SCROLLBAR_NEVER,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    scrollPane.setAutoscrolls(false);
問題: 
gbc で scrollPane を自分自身のサイズを変更するように設定しないと、 と の最小サイズを手動で計算して設定しない限り、可能な最小サイズが取得さtableれscrollPaneます。(左写真)
これを行うための他のより良いアプローチは知りません。これまでのところ、何も役に立ちませんでした。
2 ピクセルなどのパディングを検討し、allWidth、allHeight の計算を次のように調整した場合:
allHeight = (1+table.getRowCount()+pady) * height; //plus one line of header
allWidth = table.getColumnCount() * width;
右の写真が届きました。
 
 

問題を示す単純で完全なコンパイル可能なクラスを次に示します。
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
public class Main {
    public static void main(String[] args) {
        new Main().start();
    }
    private void start() {
        JFrame f = new JFrame();
        f.setLayout(new GridBagLayout());
        GridBagConstraints gbc = new GridBagConstraints();
        initTable();
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e) {
        }
        JPanel calendar = new JPanel();
        calendar.setLayout(new GridBagLayout());
        calendar.setBorder(BorderFactory.createTitledBorder("Calendar"));
        gbc.fill = GridBagConstraints.NONE;
        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.weighty = 0;
        gbc.weightx = 0;
        calendar.add(scrollPane, gbc);
        f.add(calendar,gbc);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }
    JTable table;
    JScrollPane scrollPane;
    CalendarTableModel tableModel;
    private void initTable() {
        setTable(new JTable());
        getTable().setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
        getTable().setAutoscrolls(false);
        getTable().getTableHeader().setResizingAllowed(false);
        getTable().getTableHeader().setReorderingAllowed(false);
        getTable().setColumnSelectionAllowed(true);
        getTable().setRowSelectionAllowed(true);
        getTable().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        tableModel = new CalendarTableModel();  //my class extended from AbstractTableModel
        getTable().setModel(tableModel);
        scrollPane = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_NEVER, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
        scrollPane.setAutoscrolls(false);
        //GET DIMENSION
        int width = 0;
        int height = 0;
        int allWidth, allHeight;
        int padx = 2,pady = 2;
        for (int col = 0; col < table.getColumnCount(); col++) {
            TableColumn tableColumn = table.getTableHeader().getColumnModel().getColumn(col);
            TableCellRenderer renderer = tableColumn.getHeaderRenderer();
            if (renderer == null) {
                renderer = table.getTableHeader().getDefaultRenderer();
            }
            Component component = renderer.getTableCellRendererComponent(table,
                    tableColumn.getHeaderValue(), false, false, -1, col);
            width = Math.max(component.getPreferredSize().width, width);
            table.getColumnModel().getColumn(col).setPreferredWidth(width);
        }
        allWidth = (table.getColumnCount()+padx) * width;
        for (int row = 0; row < table.getRowCount(); row++) {
            TableCellRenderer renderer = table.getCellRenderer(row, 0);
            Component comp = table.prepareRenderer(renderer, row, 0);
            height = Math.max(comp.getMinimumSize().height, height);
        }
        allHeight = (1+table.getRowCount()+pady) * height;
//HERE I SET WIDTHS AND HEIGHTS
        table.setRowHeight(height);
        table.setMinimumSize(new Dimension(allWidth, allHeight));
        scrollPane.setMinimumSize(new Dimension(allWidth, allHeight));
    }
    private void setTable(JTable jTable) {
        this.table = jTable;
    }
    private JTable getTable() {
        return this.table;
    }
    private class CalendarTableModel extends AbstractTableModel {
        private String[] daysData = {"Po", "Út", "St", "Čt", "Pá", "So", "Ne"};
        private int[][] values;
        public CalendarTableModel() {
            values = new int[7][6];
            for (int i = 0; i < 6; i++) {
                for (int j = 0; j < 7; j++) {
                    values[j][i] = 7;
                }
            }
        }
        @Override
        public int getRowCount() {
            return 6;
        }
        @Override
        public int getColumnCount() {
            return 7;
        }
        @Override
        public String getColumnName(int column) {
            return daysData[column];
        }
        @Override
        public Object getValueAt(int row, int column) {
            return this.values[column][row];
        }
        @Override
        public boolean isCellEditable(int row, int column) {
            return false;
        }
    }
}
