2

テーブルをスクロールするのに苦労しました。それはしません。他のスタックの回答を見て試してみましたが、機能していません。これらのソリューションと競合するものがあるかどうかはわかりません。

tableModel = new TableModel(); //Custom Table Model
table = new JTable();
table.setBorder(null);
table.setFillsViewportHeight(true);
table.setModel(tableModel);

JScrollPane tblScrollPane = new JScrollPane(table);
tblScrollPane.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null));
tblScrollPane.setBounds(245, 17, 560, 425);
frmServerAdministration.getContentPane().add(tblScrollPane);

編集:詳細

そのため、サーバープログラムであるウィンドウが開きます。クライアント プログラムがサーバーに接続すると、テーブル モデル クラスでメソッドがトリガーされ、テーブルに新しい行が追加されます。(行が表示されます)次に、そのメソッドの最後で別のメソッドを呼び出しますが、ScrollPane では何も変化しません。なんらかの再塗装を行う必要がありますか?-

Server.updateTableScroll();

public static void updateTableScroll() {
    System.out.println("Here"); //NOTE: I do see this printed out
    int last = table.getModel().getRowCount() - 1;
    Rectangle r = table.getCellRect(last, 0, true);
    table.scrollRectToVisible(r);        
}

編集2:考え

そのため、Eclipse では Window Builder を使用して GUI を作成し、次の for ループはスクロールバー付きのテーブルを表示します! しかし、別の時点で同じ addClient() メソッドを実行すると、スクロール バーが表示されません。

public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                Server window = new Server();
                window.frmServerAdministration.setVisible(true);
                for(int i = 0; i < 20; i++){
                    tableModel.addClient(i, String.valueOf(i));
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}
4

2 に答える 2

1

私がする必要があったのは、データを追加した後にこれを呼び出すことだけでした (私はテーブルモデルに非常に慣れていません:P ) this.fireTableStructureChanged();

于 2013-08-06T02:17:18.613 に答える