отображение информации в jtable, когда информация выбирается из другой jtable

Добрый день! У меня трудное время, связанное с Jtable. Я читал и просматривал различные учебники, но не совсем понял суть. Моя проблема в том, что мне нужно выбрать строку из jtable (jTable1), которая содержит (ClientID, LastName, FirstName). Как только я щелкнул/выбрал из таблицы, все свойства этого определенного клиента появятся в другой jtable (tableRealProperty). Обе jtable имеют общий столбец ClientID. мой код позволяет мне отображать только все свойства всех клиентов, существующих в моей БАЗЕ ДАННЫХ. я только хочу, чтобы свойство выбранного клиента появилось.

вот мой код

sql ="SELECT tblrealproperty.ClientID, tblrealproperty.Location, tblrealproperty.Area,"
    + "tblrealproperty.DateAcquired, tblrealproperty.Amount 
    FROM tblclientinfo Inner Join "
    + "tblrealproperty ON tblrealproperty.ClientID = tblclientinfo.ClientID 
    where tblClientInfo.ClientID = ?";

    try {
         pst = conn.prepareStatement(sql);     
         rs = pst.executeQuery(); 
         tablePersonalProperty.setModel(DbUtils.resultSetToTableModel(rs));
    } catch (Exception e) {
         e.printStackTrace();
         JOptionPane.showMessageDialog(null, e);
    }

Можете ли вы помочь мне с этим? Спасибо!


person zairahCS    schedule 06.03.2012    source источник
comment
что этот вопрос связан с sql ???   -  person mKorbel    schedule 06.03.2012
comment
я пытаюсь получить свойства из tblPersonalProperty в моей базе данных с тем же идентификатором ClientID, который я выбрал в 1-й таблице jtable (jTable1). эта информация должна появиться в другом jtable (tablePersonalProperty)   -  person zairahCS    schedule 06.03.2012


Ответы (1)


только что выстрелил в темноту, означают выбор для Java Swing JTable ???

введите здесь описание изображения

введите здесь описание изображения

введите здесь описание изображения

из кода

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, 100));
        sp1.setViewportView(jTable1);
        final JTable jTable2 = new JTable(model2);
        jTable2.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        final JScrollPane sp2 = new JScrollPane();
        sp2.setPreferredSize(new Dimension(600, 100));
        sp2.setViewportView(jTable2);
        /*final JTable jTable3 = new JTable(model3);
        jTable3.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        final JScrollPane sp3 = new JScrollPane();
        sp3.setPreferredSize(new Dimension(600, 100));
        sp3.setViewportView(jTable3);
        TableSelectionGood tableSelection = new TableSelectionGood(jTable1, jTable2, jTable3);*/
        TableSelectionGood tableSelection = new TableSelectionGood(jTable1, jTable2);
        JPanel panel1 = new JPanel();
        //panel1.setLayout(new GridLayout(3, 0, 10, 10));
        panel1.setLayout(new GridLayout(2, 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) {
        SwingUtilities.invokeLater(new Runnable() {

            public void run() {
                TableSelectionGood tableSelection = new TableSelectionGood();
            }
        });
    }
}
person mKorbel    schedule 06.03.2012
comment
+1 за использование ListSelectionListener; Я не думал менять выбор. В качестве альтернативы можно было бы обновить другой компонент или его модель. - person trashgod; 07.03.2012
comment
@trashgod спасибо за уведомление, уверен, что этот слушатель вызывает много сложностей для JTable или JList - person mKorbel; 07.03.2012
comment
А, я вижу, что setRowSelectionAllowed(true) по умолчанию. - person trashgod; 07.03.2012