图片Excel数据,行和列,能够对任何列上的ASC或DESC进行排序。
我希望在Java中复制此功能,然后将数据输出到JSON中 - 此JSON数据被放置在可以查询的API中,并返回基于特定列名称排序的表格样式数据。
最好的方法是什么?
JTable似乎看起来像可能帮助https://docs.oracle.com/javase/tutorial/uiswing/components/table.html#sorting,尽管我目前还不确定如何将这些过滤后的数据映射到JSON对象中。
任何指针/想法?
答案 0 :(得分:0)
请参阅下面的示例。我使用下面显示的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);
}
}