栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

将JScrollPane滚动到JTable上的特定行

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

将JScrollPane滚动到JTable上的特定行

只是通过@ Eng.Fouad +1扩展了帖子,没有我确切预期的工作(在另一个Java
Swing论坛[StanislavL的]帮助下)

import java.awt.*;import javax.swing.*;import javax.swing.event.*;import javax.swing.table.DefaultTableModel;public class TableSelectionGood implements ListSelectionListener {    private JTable[] tables;    private boolean ignore = false;    public TableSelectionGood() {        Object[][] data1 = new Object[100][5];        Object[][] data2 = new Object[50][5];        Object[][] data3 = new Object[50][5];        for (int i = 0; i < data1.length; i++) { data1[i][0] = "Company # " + (i + 1); for (int j = 1; j < data1[i].length; j++) {     data1[i][j] = "" + (i + 1) + ", " + j; }        }        for (int i = 0; i < data2.length; i++) { data2[i][0] = "Company # " + ((i * 2) + 1); for (int j = 1; j < data2[i].length; j++) {     data2[i][j] = "" + ((i * 2) + 1) + ", " + j; }        }        for (int i = 0; i < data3.length; i++) { data3[i][0] = "Company # " + (i * 2); for (int j = 1; j < data3[i].length; j++) {     data3[i][j] = "" + (i * 2) + ", " + j; }        }        String[] headers = {"Col 1", "Col 2", "Col 3", "Col 4", "Col 5"};        DefaultTableModel model1 = new DefaultTableModel(data1, headers);        DefaultTableModel model2 = new DefaultTableModel(data2, headers);        DefaultTableModel model3 = new DefaultTableModel(data3, headers);        final JTable jTable1 = new JTable(model1);        jTable1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);        final JScrollPane sp1 = new JScrollPane();        sp1.setPreferredSize(new Dimension(600, 200));        sp1.setViewportView(jTable1);        final JTable jTable2 = new JTable(model2);        jTable2.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);        final JScrollPane sp2 = new JScrollPane();        sp2.setPreferredSize(new Dimension(600, 200));        sp2.setViewportView(jTable2);        final JTable jTable3 = new JTable(model3);        jTable3.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);        final JScrollPane sp3 = new JScrollPane();        sp3.setPreferredSize(new Dimension(600, 200));        sp3.setViewportView(jTable3);        TableSelectionGood tableSelection = new TableSelectionGood(jTable1, jTable2, jTable3);        JPanel panel1 = new JPanel();        panel1.setLayout(new GridLayout(3, 0, 10, 10));        panel1.add(sp1);        panel1.add(sp2);        panel1.add(sp3);        Jframe frame = new Jframe("tableSelection");        frame.add(panel1);        frame.pack();        frame.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);        frame.setVisible(true);    }    public TableSelectionGood(JTable... tables) {        for (JTable table : tables) { table.getSelectionModel().addListSelectionListener(this);        }        this.tables = tables;    }    private JTable getTable(Object model) {        for (JTable table : tables) { if (table.getSelectionModel() == model) {     return table; }        }        return null;    }    private void changeSelection(JTable table, String rowKey) {        int col = table.convertColumnIndexToView(0);        for (int row = table.getRowCount(); --row >= 0;) { if (rowKey.equals(table.getValueAt(row, col))) {     table.changeSelection(row, col, false, false);     return; }        }        table.clearSelection();    }    @Override    public void valueChanged(ListSelectionEvent e) {        if (e.getValueIsAdjusting() || ignore) { return;        }        ignore = true;        try { JTable table = getTable(e.getSource()); int row = table.getSelectedRow(); String rowKey = table.getValueAt(row, table.convertColumnIndexToView(0)).toString(); for (JTable t : tables) {     if (t == table) {         continue;     }     changeSelection(t, rowKey);     JViewport viewport = (JViewport) t.getParent();     Rectangle rect = t.getCellRect(t.getSelectedRow(), 0, true);     Rectangle r2 = viewport.getVisibleRect();     t.scrollRectToVisible(new Rectangle(rect.x, rect.y, (int) r2.getWidth(), (int) r2.getHeight()));     System.out.println(new Rectangle(viewport.getExtentSize()).contains(rect)); }        } finally { ignore = false;        }    }    public static void main(String[] args) {        TableSelectionGood tableSelection = new TableSelectionGood();    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/569370.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号