TableModelListener介于两个不同的JTable之间

时间:2015-04-17 07:39:03

标签: java swing jtable listener

我目前正在使用两个JTable。他们每个人都有自己的自定义TableModel。

在第一个JTable中我有可以选择的项目(复选框)。第二个开始是空的。当我检查第一个表中的一行时,该行的backgroundColor发生了变化(感谢preparedRenderer方法),我希望在第二个JTable中添加选中行的内容。

我想我应该使用TableModelListener,但我不知道如何告诉第二个表(及其模型)听第一个。

有没有人想过这个?

以下是我得到的代码示例:

public class MyClass {

    private Model1 model1;
    private Model2 model2;

    private JTable table1;
    private JTable table2;

    public void myMethod()
    {
        table1 = new JTable();
        model1 = new Model1();
        table1.setModel(model1);

        table1.getModel().addTableModelListener(new TableModelListener()
        {
            @Override
            public void tableChanged(TableModelEvent e) 
            {
                //Here some code to enable a button when at least one row is checked
                //that works fine
            }
        });


        table2 = new JTable();
        model2 = new Model2();
        table2.setModel(model2);
    }
}

感谢您的帮助:)

3 个答案:

答案 0 :(得分:2)

  

使用两个JTable。他们每个人都有自己的自定义TableModel。

     

在第一个JTable中我有可以选择的项目(复选框)。该   第二个开始是空的。当我检查第一张表中的一行时,   lineColor的行更改(感谢preparedRenderer   方法)

  • 不要使用TableModelListener,覆盖setValueAtEach of them has its own custom TableModel.)作为第一个XxxTableModel,例如tableModelFirts.setValueAt(whatever_linked_in_second_model)

  • TableModelListener无法使用as notifier to change value in model, inside or outside

答案 1 :(得分:2)

您可以在model1的侦听器中更新model2并刷新其table2:

public class MyClass  {

    private Model1 model1;
    private Model2 model2;

    private JTable table1;
    private JTable table2;

    public void myMethod()
    {
        table1 = new JTable();
        model1 = new Model1();
        table1.setModel(model1);

        table2 = new JTable();
        model2 = new Model2();
        table2.setModel(model2);

        table1.getModel().addTableModelListener(new TableModelListener()
        {
            @Override
            public void tableChanged(TableModelEvent e) 
            {
                //Here some code to enable a button when at least one row is checked
                //that works fine
                Object aValue = "something"; //fill
                int row = 1; //fill
                int column = 1; //fill
                model2.setValueAt(aValue, row, column);
                model2.fireTableDataChanged();
            }
        });
    }
}

答案 2 :(得分:0)

谢谢你们!

我终于成功了。我使用了各种解决方案。

在我的tableListener(来自table1)中,我得到了被检查的对象并从我的table2中调用了setValue方法,我已经覆盖了我想做的事情(因为我的对象是一个自定义对象)。