Как сделать эту таблицу прокручиваемой? - PullRequest
0 голосов
/ 06 августа 2020

У меня есть эта таблица, которая должна отображать Integer.MAX_VALUE много строк с возможностью прокрутки, но нет полосы прокрутки, хотя я ее добавил. Может кто-нибудь пролить свет на то, что нужно изменить / добавить?

import java.awt.*;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;

class DynamicTableModel extends AbstractTableModel {
    final static String[] headers = {"Seconds Since Epoch", "Formatted Timestamp"};

    private static String getPrettyStringFromEpochSeconds(int seconds) {
        LocalDateTime dateTime = LocalDateTime.ofEpochSecond(seconds, 0, ZoneOffset.UTC);
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("h:mm:ss a EEEE, MMMM d, yyyy", Locale.ENGLISH);
        String formattedDate = dateTime.format(formatter);
        return formattedDate;
    }

    @Override
    public int getRowCount() {
        return Integer.MAX_VALUE;
    }

    @Override
    public int getColumnCount() {
        return headers.length;
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        return (columnIndex == 0) ? rowIndex : getPrettyStringFromEpochSeconds(rowIndex);
    }
}

public class GoodTable extends JPanel{

    JTable jt;
    public GoodTable(){

        DynamicTableModel model = new DynamicTableModel();

        JTable table = new JTable(model);

        //table.setPreferredScrollableViewportSize(new Dimension(500,300));
        table.setFillsViewportHeight(true);

        JScrollPane js=new JScrollPane(table);
        js.setVisible(true);
        add(js);

    }

    public static void main(String[] args) {

        JFrame jf=new JFrame();
        GoodTable tab= new GoodTable();
        jf.setTitle("Table");
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        jf.setSize(screenSize.width, screenSize.height);
        jf.setVisible(true);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.add(tab);




    }

}

1 Ответ

0 голосов
/ 06 августа 2020

Существует ограничение при использовании Integer.MAX_VALUE.

Прокрутка работает, когда я использую:

public int getRowCount() {
    //return Integer.MAX_VALUE / 15; // doesn't work
    return Integer.MAX_VALUE / 16;
}

Я использовал 16, поскольку это высота каждой строки в таблице.

Таким образом, максимальный предпочтительный размер будет строк * 16, поскольку предпочтительная высота также ограничена целочисленным значением.

...