Frage

Ich habe einen Java Swing GUI und bekam ein Problem mit einem JTable in einem JScrollPane. Aus irgendeinem Grund, wenn die Zeilen des Tabellenmodells während der Programmausführung erhöht werden, wird die JScrollPane nicht aktualisiert - das heißt, wenn die Zeilen erhöht werden, so dass die Höhe des Tisches über die Höhe der Scroll-Ansicht ist, die Scroll-Scheiben sind nicht wie angenommen aktualisiert. (Die neuen Zeilen werden auf dem Bildschirm dargestellt, wie erwartet). Wenn das Fenster verkleinert wird, Scrollen aktualisiert werden, wie erwartet.

Die vertikale Scroll-Politik ist VERTICAL_SCROLLBAR_AS_NEEDED, Tischmodelle fireTableDataChanged genannt wird ..

Leider ist der Code ein wenig komplex, so kann ich nicht ein Codebeispiel das Problem verursacht bereitzustellen. Aber gedacht zu fragen, ob jemand ein paar Ideen gerade bekam ..

EDIT: Noch ein bisschen mehr verwirrend: horizontale Scrollen Politik ist HORIZONTAL_SCROLLBAR_AS_NEEDED, und wenn die Tabellenbreite, wenn sie über die Ansichtsbreite (das heißt, die horizontalen Scrollbalken verwendet wird), wird dieses Problem nicht auftreten ...

EDIT2:. Das Problem ist nicht, dass die Tabelle gescrollt werden soll aber, dass die Bildlaufleiste nicht aktiviert sind, wie sie sollten

War es hilfreich?

Lösung 2

Hmm .. nach der Frage der Rückkehr fand ich heraus, dass unser Zeilenkopf Customizing in JScrollPane das Problem verursacht wurde. (Einige preferredsizes gesetzt wurden mit nicht-so-vernünftigen Werten usw.) ..

Andere Tipps

Sie müssen möglicherweise einige Ihren Code schreiben. Ich habe geklopft nur den folgenden Test und es funktioniert wie beworben, das heißt vertikale Scrollbalken werden aktiviert, wenn die Anzahl der Zeilen, die Darstellungshöhe überschreitet:

import java.awt.GridLayout;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ScrollPaneConstants;
import javax.swing.table.AbstractTableModel;

public class JTableTest {

    public static void main(String[] args) {
        final MyTableModel tm = new MyTableModel();
        tm.addData(new Data("R1C1", "R1C2"));

        JTable table = new JTable(tm);
        JScrollPane scrollPane = new JScrollPane(table);
        scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
        JFrame frame = new JFrame();
        frame.setLayout(new GridLayout());
        frame.add(scrollPane);
        frame.pack();
        frame.setSize(400, 150);
        frame.setVisible(true);

        Thread t = new Thread(new Runnable() {
            private int count = 2;
            public void run() {
                for ( ; ; ) {
                    tm.addData(new Data("R" + count + "C1", "R" + count + "C2"));
                    count++;
                    try {
                        Thread.sleep(2000);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
        });
        t.start();
    }

    private static class MyTableModel extends AbstractTableModel {
        private List<Data> dataList = new ArrayList<Data>();

        public int getColumnCount() {
            return 2;
        }

        public void addData(Data data) {
            dataList.add(data);
            fireTableRowsInserted(dataList.size()-1, dataList.size()-1);
        }

        public int getRowCount() {
            return dataList.size();
        }

        public Object getValueAt(int rowIndex, int columnIndex) {
            Data data = dataList.get(rowIndex);
            return columnIndex == 0 ? data.data1 : data.data2;
        }
    }

    private static class Data {
        public String data1;
        public String data2;

        public Data(String data1, String data2) {
            this.data1 = data1;
            this.data2 = data2;
        }
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top