아래 예제를 참조하십시오. 아래에 표시된 GSON 종속성을 사용하여 Vector를 JSON 문자열로 변환했습니다. 그리고 JTable.convertRowIndexToModel() API를 사용하여 올바른 순서로 테이블 행을 가져 왔습니다.
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.6.2</version>
</dependency>
public class TableDataToJson {
public static void main(String[] args) {
JFrame frame = new JFrame("Table data to JSON");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final DefaultTableModel tableModel = new DefaultTableModel(
new Object[][] {{"Sugar", 14}, {"Eggs", 8}, {"Butter", 12}, {"Flour", 10}},
new Object[] {"Item name", "Price"}) {
@Override
public Class<?> getColumnClass(int columnIndex) {
if (columnIndex == 1) {
return Integer.class;
}
return super.getColumnClass(columnIndex);
}
};
final JTable table = new JTable(tableModel);
table.setAutoCreateRowSorter(true);
JButton button = new JButton("Print JSON");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Vector vectorInModelOrder = tableModel.getDataVector();
Vector vectorInViewOrder = new Vector();
for (int i = 0; i < vectorInModelOrder.size(); i++) {
vectorInViewOrder.add(vectorInModelOrder.get(table.convertRowIndexToModel(i)));
}
Gson gson = new Gson();
System.out.println(gson.toJson(vectorInViewOrder));
}
});
frame.getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
frame.getContentPane().add(button, BorderLayout.SOUTH);
frame.pack();
frame.setVisible(true);
}
}