Using an empty column as a divider in a JTable

后端 未结 4 1091
佛祖请我去吃肉
佛祖请我去吃肉 2020-11-29 13:17

I\'m trying to use an empty column as a divider between pairs of columns in a JTable. Here\'s a picture and code for what I have so far. I know I can change the

相关标签:
4条回答
  • 2020-11-29 13:58

    On problem with this approach it that the user will need to "tab over" the divider column. You could use the Table Tabbing suggestion to make it more user friendly.

    Or if tabbing between the two tables isn't important, then maybe you can use use two tables and put whatever divider you want betweeen the two. The selection model can shared if required.

    Edit:

    As I suggested above sharing models is easier than writing custom listeners. To keep the scrolling in sync the code would be:

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

    You can also do the same with the selection model so that highlighting of rows is in sync.

    0 讨论(0)
  • 2020-11-29 14:03

    Without knowing what do you want to show in this table it's hard to tell whether you've selected good solution or not.

    Regarding this solution. This column does not seem like a divider. Paint it with gray/another color, or paint divider header cell in white.

    But anyway I'd prefer JScrollPane + two tables inside it instead of this solution.

    0 讨论(0)
  • 2020-11-29 14:04

    I kind of combined both answers: I used two tables that share one's scrollbar. This works with sorting, and it actually makes the model simpler. Tabbing doesn't matter, but comparing "A" and "B" does. I think I was trying to solve a "view" problem in the "model". I made this a separate answer, because I'd appreciate any critical comments.

    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());
    }
    
    0 讨论(0)
  • 2020-11-29 14:16

    Please have a look at the answer of this question, some nice new suggestion was given there: Column dividers in JTable or JXTable

    0 讨论(0)
提交回复
热议问题