Как оказать поддержку разбиения на страницы JTable в Swing?

Я полагаю, что то, что Вы видите, является результатом оптимизаций - иногда, переменная будет снова использована - особенно те, которые создаются на стеке. Например, предположите, что у Вас есть метод, который использует два (локальных) целых числа. Первое целое число объявляется в начале метода и используется только в качестве счетчика для цикла. Ваше второе целое число используется после того, как цикл был завершен, и это хранит результат вычисления, которое позже выписано в файл. В этом случае оптимизатор МОЖЕТ решить снова использовать Ваше первое целое число, сохранив код, необходимый для второго целого числа. То, когда Вы пытаетесь посмотреть на второе целое число вначале, Вы получаете сообщение, что Вы спрашиваете о, "Не может оценить выражение". Хотя я не могу объяснить точные обстоятельства, для оптимизатора возможно передать значение второго целого числа в отдельный объект стека позже, приводя к Вам тогда способность получить доступ к значению от отладчика.

12
задан Stephan 1 May 2015 в 12:11
поделиться

2 ответа

Paging in a Swing JTable looks like a nice article.

Here is an excerpt:

As far as I remember the solution for this problem lies in the concept of paging: just retrieve the data that the user wants to see and nothing more. This also means you have to sometimes get extra data from the db server (or appserver) if your user scrolls down the list.

Big was my surprise that there wasn't really an out-of-the-box solution (not even a copy- paste solution) for this problem. Anyone that knows one, please don't hesitate to extend my (rather limited) knowledge of the J2EE platform.

So we dug in, and tried to build a solution ourselves. В конечном итоге мы придумали адаптированный класс TableModel для разбиения на страницы.

3
ответ дан 2 December 2019 в 23:20
поделиться

Другой вариант реализовать это - использовать полосу прокрутки без полосы прокрутки и пару кнопок навигации для управления. Добавленные кнопки представляют собой обычные JButton для прототипа.

Быстрый прототип добавлен ниже. Он делает несколько предположений, одно из которых состоит в том, что табличная модель имеет все свои данные. Можно было бы поработать, чтобы гарантировать, что строки заканчиваются на одном уровне в верхней части представления при навигации.

private void buildFrame() {
    frame = new JFrame("Demo");
    frame.setSize(300, 300);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    addStuffToFrame();
    frame.setVisible(true);

}

private void addStuffToFrame() {
    final JTable table = getTable();
    final JScrollPane scrollPane = new JScrollPane(table);
    scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
    final JButton next = new JButton("next");
    final JButton prev = new JButton("prev");

    ActionListener al = new ActionListener(){
        public void actionPerformed(ActionEvent e) {
            Rectangle rect = scrollPane.getVisibleRect();
            JScrollBar  bar = scrollPane.getVerticalScrollBar();
            int blockIncr = scrollPane.getViewport().getViewRect().height;
            if (e.getSource() == next) {
                bar.setValue(bar.getValue() + blockIncr);
            } else if (e.getSource() == prev) {
                bar.setValue(bar.getValue() - blockIncr);
            }
            scrollPane.scrollRectToVisible(rect);
        }
    };

    next.addActionListener(al);
    prev.addActionListener(al);

    JPanel panel = new JPanel(new BorderLayout());
    JPanel buttonPanel = new JPanel();
    buttonPanel.add(prev);
    buttonPanel.add(next);
    panel.add(buttonPanel, BorderLayout.NORTH);
    panel.add(scrollPane, BorderLayout.CENTER);
    frame.getContentPane().add(panel);
}

private JTable getTable() {
    String[] colNames = new String[]{
            "col 0", "col 1", "col 2", "col 3"
    };

    String[][] data = new String[100][4];
    for (int i = 0; i < 100; i++) {
        for (int j = 0; j < 4; j++) {
            data[i][j] = "r:" + i + " c:" + j;
        }
    }

    return new JTable(data,colNames);

}

alt text http://img7.imageshack.us/img7/4205/picture4qv.png[1225 visible

3
ответ дан 2 December 2019 в 23:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: