2017-09-12 2 views
0

jtable 셀 리스너에 대한 이해를 돕기 위해 도움이 필요합니다.JTable 셀 리스너 JAVA

내 문제는 내가 세포에서 변화를 잡을 필요가있다, 그것이 잡힐 때, 나는 오래된 가치와 새로운 가치를 얻을 필요가있다.

내가 묻는 이유는 DefaultTableModel에서 JTable을 사용하고 있기 때문입니다.

나는 이것에 대해 다른 게시물을 보았습니다. 그러나 "String"결과를 얻지 못하고 구현하려고 할 때만 직렬화 된 결과 만 나타납니다. 여기

내가 사용하고 무엇을 :

null 
[email protected] 
[email protected] 
null 
null 
[email protected] 
com.apple.laf.AquaImageFactory$SystemColorProxy[r=255,g=255,b=255] 
com.apple.laf.AquaImageFactory$SystemColorProxy[r=0,g=0,b=0] 
com.apple.laf.AquaImageFactory$SystemColorProxy[r=9,g=80,b=208] 
com.apple.laf.AquaImageFactory$SystemColorProxy[r=202,g=202,b=202] 
null 
false 
com.apple.laf.AquaImageFactory$SystemColorProxy[r=0,g=0,b=0] 
com.apple.laf.AquaImageFactory$SystemColorProxy[r=255,g=255,b=255] 
com.apple.laf.AquaImageFactory$SystemColorProxy[r=202,g=202,b=202] 
com.apple.laf.AquaImageFactory$SystemColorProxy[r=9,g=80,b=208] 
false 
true 
com.apple.laf.AquaImageFactory$SystemColorProxy[r=255,g=255,b=255] 
com.apple.laf.AquaImageFactory$SystemColorProxy[r=0,g=0,b=0] 
com.apple.laf.AquaImageFactory$SystemColorProxy[r=9,g=80,b=208] 
com.apple.laf.AquaImageFactory$SystemColorProxy[r=202,g=202,b=202] 
true 
false 
+1

그럼, 실제로해야 할 일은'DefaultTableModel'의'setValueAt' 메소드를 오버라이드하는 것입니다. 이것은 값이 변경된시기를 알려주고 새로운 값과 이전 값 모두에 대한 액세스를 제공합니다. 당신은'TableModelListener'를 사용하려고 시도 할 수 있습니다, 그러나 당신은 단지 새로운 값을 얻을 것입니다. – MadProgrammer

+0

@MadProgrammer 무엇을 의미합니까? 오버라이드 주석을 사용하여 나만의 메서드를 만들려면 어떻게해야합니까? – Ervinas34

+0

... 기본 OO를 이해 하시겠습니까? 'DefaultTableModel'은'setValueAt' 라 불리는 (TableModel을 통해 주입 된'AbstractTableModel'에서 상속받은) 메소드를 가지고 있습니다. 이것은 어떤 파티원이 주어진 셀에서 값을 변경하기를 원할 때 (보통) 호출됩니다. 이것은 이전 값과 새로운 값 모두를 얻는 유일한 (합리적인) 장소 일 것이다. – MadProgrammer

답변

1

두 가지 방법을 :

 table.addPropertyChangeListener(new PropertyChangeListener() { 

     @Override 
     public void propertyChange(PropertyChangeEvent evt) { 

      System.out.println(evt.getOldValue()); 
      System.out.println(evt.getNewValue()); 
     } 

    }); 

이 내가 무엇을 얻을 수 있습니다.

첫 번째는 TableModel을 사용자 지정하고 setValueAt(...) 메서드를 재정의하는 것입니다. 기본 코드는 다음과 같습니다

@Override 
public void setValueAt(Object newValue, int row, int column) 
{ 
    Object oldValue = getValueAt(row, column); 

    // do processing with your "oldValue" and the "newValue" 

    super.setValueAt(...); 
} 

다른 방법은 당신이 어떤 TableModel에 추가 할 수있는 "리스너"를 사용하는 것입니다. 이 방법의 경우 Table Cell Listener을 사용할 수 있습니다. 이 클래스는 oldValue/newValue가 변경 될 때마다 이벤트를 생성합니다. 이 이벤트는 처리 할 수 ​​있도록 양쪽 값에 대한 액세스를 제공합니다.

정확한 요구 사항에 따라 두 방법 중 하나를 사용할 수 있습니다.