質問

空の列を列のペア間の区切り線として使用しようとしています。 JTable. 。これは私がこれまでに持っているものの写真とコードです。カスタムを使用して外観を変更できることはわかっています TableCellRenderer. 。その道を進む前に、もっと良い方法はないでしょうか?あらゆるアイデアを歓迎します。

TablePanel.png

import javax.swing.*;
import javax.swing.table.*;

public class TablePanel extends JPanel {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame f = new JFrame("TablePanel");
                f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                f.add(new TablePanel());
                f.pack();
                f.setVisible(true);
            }
        });
    }

    public TablePanel() {
        TableModel dataModel = new MyModel();
        JTable table = new JTable(dataModel);
        table.getColumnModel().getColumn(MyModel.DIVIDER).setMaxWidth(0);
        JScrollPane jsp = new JScrollPane(table);
        jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        this.add(jsp);
    }

    private static class MyModel extends AbstractTableModel {

        private static final int DIVIDER = 2;
        private final String[] names = { "A1", "A2", "", "B1", "B2" };

        @Override
        public int getRowCount() {
            return 32;
        }

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

        @Override
        public String getColumnName(int col) {
            if (col == DIVIDER) return "";
            return names[col];
        }

        @Override
        public Object getValueAt(int row, int col) {
            if (col == DIVIDER) return "";
            return (row + 1) / 10.0;
        }

        @Override
        public Class<?> getColumnClass(int col) {
            if (col == DIVIDER) return String.class;
            return Number.class;
        }
    }
}
役に立ちましたか?

解決

それはユーザーが仕切り欄「の上にタブ」にする必要がありますことを、このアプローチの問題で。あなたはそれがよりユーザーフレンドリーにするために表タブ移動の提案を使用することができます。

あるいは、2つのテーブル間のタブ移動することは重要でない場合は、多分あなたは、あなたが2 betweeen好きな分周器2つのテーブルとプットの使用を使用することができます。必要に応じて選択モデルを共有することができます。

編集ます:

として、私は共有モデル上で提案は、カスタムリスナーを書くよりも簡単です。コードは次のようになり同期スクロールを維持するには:

jspa.getVerticalScrollBar().setModel( jspb.getVerticalScrollBar().getModel() );

行のハイライト表示が同期しているように、あなたはまた、選択モデルと同じことを行うことができます。

他のヒント

I種の組み合わせの両方の回答:私は株式1のスクロールバーという2つのテーブルを使用していました。これは、ソートで動作し、それが実際にモデルが簡単になります。タブ移動は重要ではありませんが、「A」と「B」を比較しません。私は、「モデル」の「ビュー」の問題を解決しようとしていたと思います。私は批判的なコメントをいただければと思いますので、私は、これに別の答えを作っています。

public TablePanel() {
    this.setLayout(new GridLayout(1, 0, 8, 0));

    JTable tableA = new JTable(new MyModel("A"));
    tableA.setPreferredScrollableViewportSize(new Dimension(200, 400));
    final JScrollPane jspA = new JScrollPane(tableA);
    jspA.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
    this.add(jspA);

    JTable tableB = new JTable(new MyModel("B"));
    tableB.setPreferredScrollableViewportSize(new Dimension(200, 400));
    final JScrollPane jspB = new JScrollPane(tableB);
    jspB.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
    this.add(jspB);

    tableA.setSelectionModel(tableB.getSelectionModel());
    jspA.getVerticalScrollBar().setModel(jspB.getVerticalScrollBar().getModel());
}
あなたは、この表で、それはあなたが良い解決策かどうかを選択しているかどうかを言うのは難しい見せたいんものを知らず、

このソリューションについて

。この列には、分周器のように見えるしていません。グレー/別の色でペイント、または白に分周ヘッダーセルを描く。

しかし、いずれにせよ、私はこのソリューションの代わりに、その内部にJScrollPane + 2つのテーブルを好むだろう。

この質問の答えを見てください。そこでは、いくつかの素晴らしい新しい提案が提供されています。 JTable または JXTable の列分割線

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top