новичок здесь.
Я работаю в приложении для отображения информации для пользователей о различных компаниях. Я получаю информацию через API в разных форматах, в некоторых есть поля, которые облегчают десериализацию, а в других ответах содержится только список столбцов и список> строк. Я воссоздал минимальный JFrame, чтобы показать мою проблему:
Мой вопрос о последнем. Я перебираю список и добавляю каждую строку в JList, и после выбора информация, содержащаяся в этом списке, отображается в JLabels.
Вместо того, чтобы весь список, содержащийся в каждом объекте, отображался в JList, есть ли способ отображать только определенные значения из каждого списка? Например, Дата и Персона? У меня нет класса с геттерами и сеттерами, потому что в ответе API нет полей.
Вот код для окна:
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Window extends JFrame {
private JPanel contentPane;
public JList list1;
private JButton buttonSearch;
private JTextField searchField;
public JLabel nameValue;
public JLabel roleValue;
DefaultListModel listModel = new DefaultListModel();
public String passingValue;
public String passingValue2;
public Window() {
buttonSearch.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
clearList();
URL apiURL = new URL("http://api.cloudquote.io/sage/getInsiderActions.json?
T=APIKEYHERE&symbol=GOOG");
String readLine = null;
HttpURLConnection conn = (HttpURLConnection) apiURL.openConnection();
conn.setRequestMethod("GET");
int responseCode = conn.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
BufferedReader in = new BufferedReader(new
InputStreamReader(conn.getInputStream()));
StringBuffer response = new StringBuffer();
while ((readLine = in.readLine()) != null) {
response.append(readLine);
}
in.close();
String jsonResponse = response.toString();
Deserializer actions = new Gson().fromJson(jsonResponse, Deserializer.class);
Object[] newList = actions.getRows().toArray();
for (Object object : newList) {
listModel.addElement(object);
}
list1.setModel(listModel);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
list1.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
nameValue.setText("");
roleValue.setText("");
String stringTest = String.valueOf(list1.getSelectedValue());
List<String> myList = new ArrayList<String>(Arrays.asList(stringTest.split(",")));
passingValue = myList.get(0);
passingValue2 = myList.get(2);
nameValue.setText(passingValue);
roleValue.setText(passingValue2);
}
});
}
public static void main(String[] args) {
JFrame frame = new JFrame("Testing");
frame.setContentPane(new Window().contentPane);
frame.setPreferredSize(new Dimension(750, 500));
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
public void clearList() {
list1.removeAll();
}
}
Вот мой класс десериализации для анализа JSON ответ:
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import java.util.List;
public class Deserializer {
@SerializedName("rows")
@Expose
private List<List<String>> rows = null;
@SerializedName("columns")
@Expose
private List<String> columns = null;
public List<List<String>> getRows() {
return rows;
}
public void setRows(List<List<String>> rows) {
this.rows = rows;
}
public List<String> getColumns() {
return columns;
}
public void setColumns(List<String> columns) {
this.columns = columns;
}
@Override
public String toString() {
return "Deserializer{" +
"rows=" + rows +
'}';
}
}
И, наконец, вот как выглядит ответ JSON:
{
"rows": [
[
"CapitalG LP",
1678225,
"",
"C",
"2020-02-13",
830211,
0,
"A",
"I",
830211,
"https://www.sec.gov/Archives/edgar/data/1535527/000089924320004527/xslF345X03/doc4.xml"
]],
"columns": [
"Insider",
"CIK",
"Role",
"Transaction Code",
"Transaction Date",
"Shares",
"Price Range",
"Aquired/Disposal",
"D/I Own",
"Total Holdings",
"Filing"
]
}
Каков наилучший подход к решению этой проблемы? Большое спасибо.