Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

tableChangedとの動作について

お世話になります。
JTableのcolumnModelが動作しないため、いろいろ調べたのですが、解決口が見つからず、ヒントをいただければと思います。よろしくお願い致します。

[やりたいこと] Jtableに変更が発生した場合に、イベントを取得したい。

[やろうとしたこと]
TableModelListenerを実装したJtableのpublic void tableChangedをオーバライドしようとしました。

[問題]
public void tableChangedをオーバーライド(記述しなければ、columnModelは動作し、意図したとおりなります。ただし、public void tableChangedをオーバーライドすると、columnModelが動作しなくなります。
tableChangedとColumnModelの関係が全くつかめていないため、ご教授頂きたく。よろしくお願いいたします。


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;

public class MainPanel extends JPanel {

    private MyJTable table = new MyJTable();
    public MainPanel() {
        
        super(new BorderLayout());

        DefaultTableModel m_DTM = (DefaultTableModel)table.getModel();

        m_DTM.addColumn("column1");
        m_DTM.addColumn("column2");
        
        add(new JScrollPane(table));
        setPreferredSize(new Dimension(320, 240));
        
    }

}

import javax.swing.JFrame;

public class classMain {

    public static void main(String[] args) {
        JFrame dlg = new JFrame();
        MainPanel mypanel = new MainPanel();
                
        dlg.setSize(600, 300);
        
        dlg.getContentPane().add(mypanel);
        dlg.setVisible(true);
        
    }

}

import javax.swing.JTable;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;

public class MyJTable extends JTable implements TableModelListener{
    
    public MyJTable(){
        super();
    }
    
    @Override
    public void tableChanged(TableModelEvent e) { //←このメソッドを追加するとカラムモデルが動作しなくなる。
        
    }

}

5

回答

7432

閲覧

5件の回答

評価

0

既存のtableChanged実装は呼んでるの?

評価

0

分かりづらい気がしたんで補足。

JTableはすでにtableChangedを実装してないかい?
オーバーライドすることで元の振る舞いを変える(まさにオブジェクト指向のポイントだ)んだから、振る舞いを追加したいだけなら、元の振る舞いは自分で呼び出してやらんとねえ。

評価

0

$さん、ご意見ありがとうございます。
よく内容は理解できました。しかし、元のメソッドを呼ぶ方法が・・・orz
 少し考えます。

評価

0

コンストラクタは明示的に書いてるのに。
それと同じようなものなんだが。

評価

0

 $ さん、ありがとうございました。
できました。

superの意味を理解していませんでした。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。