我试图使用一个空塔如在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;
        }
    }
}
有帮助吗?

解决方案

在这种方法它使得用户将需要“标签之上”分隔列问题。您可以使用表Tab键的建议,使之更加人性化。

或者,如果两个表之间的互联并不重要,那么也许你可以使用使用两个表,把你想要的betweeen两个凡是分频器。选择模型可以根据需要共享。

编辑:

正如我上面提出共享模式比编写定制的听众更容易。为了保持滚动同步代码将是:

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

您也可以做同样的与选择模式,使行的突出是处于同步状态。

其他提示

I类结合两个答案的:我用两个表共享一个的滚动条。这适用于分类,它实际上使模型更简单。 Tab键无所谓,但比较“A”和“B”一样。我想我是试图解决在“模式”一“视图”的问题。我此做了一个单独的应答,因为我理解任何关键评论。

“TablePanel”

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中+两个表里面而不是此溶液中。

请看看这个问题的答案,一些不错的新建议给予有:的中的JTable或JXTable

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top