2013-11-28 1 views
0

JTable의 내용이 처음 테이블을 만들 때 채워지는 수많은 예제와 튜토리얼이 있지만, Action event에서 테이블을 채우는 방법을 이해하는 데 어려움을 겪고 있습니다. . 나는 JButton 클릭 action event에서 JTable을 채우는 싶습니다 Mkyong에서 파생 된 소스 코드와 How to use tables에 들어있는 예제 튜토리얼의액션 수행 이벤트에서 XML 요소를 가져 오기

씨. JButtonTableDemo 클래스에서 내 addDataToTable() 메서드를 호출합니다. 여기

public class TableDemo extends JPanel { 
private JTable table; 

public TableDemo() { 
    super(new GridLayout(1, 0)); 

    table = new JTable(new ExifTableModel()); 
    table.setPreferredScrollableViewportSize(new Dimension(500, 70)); 
    table.setFillsViewportHeight(true); 

    JScrollPane scrollPane = new JScrollPane(table); 
    add(scrollPane); 

    addDataToTable(); 
} 

private static void createAndShowGUI() { 
    JFrame frame = new JFrame("TableDemo"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    TableDemo newContentPane = new TableDemo(); 
    newContentPane.setOpaque(true); //content panes must be opaque 
    frame.setContentPane(newContentPane); 

    frame.pack(); 
    frame.setVisible(true); 
} 

public static void main(String[] args) { 
    javax.swing.SwingUtilities.invokeLater(new Runnable() { 

     @Override 
     public void run() { 
      createAndShowGUI(); 
     } 
    }); 
} 

private void addDataToTable() { 
    try { 

     File file = new File("myDoc.xml"); 
     JAXBContext jaxbContext = JAXBContext.newInstance(Exif.class); 

     Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); 
     Exif exif = (Exif) jaxbUnmarshaller.unmarshal(file); 
     System.out.println(exif.toString()); 

     table.setValueAt(exif, 0, 0); 

    } catch (JAXBException e) { 
     e.printStackTrace(); 
    } 
} 

}

답변

0

확인

Exif.java

@XmlRootElement 
public class Exif { 

private int imgId; 
private Date imgTimesatmp; 
private String imgFilename; 
private Double imgLatitude; 
private Double imgLongitude; 

public Exif() { 
} 

public int getImgId() { 
    return imgId; 
} 

@XmlAttribute 
public void setImgId(int imgId) { 
    this.imgId = imgId; 
} 

public Double getImgLatitude() { 
    return imgLatitude; 
} 

@XmlElement 
public void setImgLatitude(Double imgLatitude) { 
    this.imgLatitude = imgLatitude; 
} 

public Double getImgLongitude() { 
    return imgLongitude; 
} 

@XmlElement 
public void setImgLongitude(Double imgLongitude) { 
    this.imgLongitude = imgLongitude; 
} 

public Date getImgTimesatmp() { 
    return imgTimesatmp; 
} 

@XmlElement 
public void setImgTimesatmp(Date imgTimesatmp) { 
    this.imgTimesatmp = imgTimesatmp; 
} 

public String getImgFilename() { 
    return imgFilename; 
} 

@XmlElement 
public void setImgFilename(String imgFilename) { 
    this.imgFilename = imgFilename; 
} 
} 

ExifTableModel.java

public class ExifTableModel extends AbstractTableModel { 

private String[] columnNames = {"Image Id", 
    "Timestamp", 
    "Filename", 
    "Latitude", 
    "Longitude"}; 

private ArrayList<ArrayList<Object>> tableData = new ArrayList<ArrayList<Object>>(); 

@Override 
public int getColumnCount() { 
    return columnNames.length; 
} 

@Override 
public int getRowCount() { 
    return tableData.size(); 
} 

@Override 
public String getColumnName(int col) { 
    return columnNames[col]; 
} 

@Override 
public Object getValueAt(int row, int col) { 
    if (tableData.size() > 0) { 
     return tableData.get(row).get(col); 
    } 
    return null; 
} 

@Override 
public Class getColumnClass(int c) { 
     return getValueAt(0, c).getClass(); 
} 

@Override 
public void setValueAt(Object value, int row, int col) { 
    if (tableData.size() <= row) { 
     ArrayList<Object> arrayList = new ArrayList<Object>(); 
     for (int i = 0; i < columnNames.length; i++) { 
      arrayList.add(""); 
     } 
     tableData.add(arrayList); 
    } 

    ArrayList<Object> object = tableData.get(row); 
    object.add(col, value); 
    tableData.set(row, object); 
    fireTableDataChanged(); 
} 
} 

TableDemo.java은 당신이 할 수있는 것입니다.

JAXB 또는 SAX를 사용하거나 XML을 읽고 객체에 매핑하고 싶습니다. 이러한 개체를 목록에 저장하십시오. SAX에서 JAXB는이를 수행합니다. 이는 추가 단계입니다.

개체에 게터와 세터가 있는지 확인하십시오. 그런 다음이 데이터를 가져 와서 예제와 같이 테이블을 채울 수 있습니다.

actionPerformed에서 큰 XML 파일을 읽지 마십시오. 그것은 버튼이 눌려 졌다는 것을 알려주는 릴레이입니다. 대신 파일을 읽을 스레드를 시작하십시오. JAXB 정렬 및 비 정렬은 해당 스레드에서 수행해야합니다.

관련 문제