столкнулся с одной вещью. У меня идут данные с телефона на компьютер и они отображаются в окне JFrame. Решил попробовать сделать с SwingWorker, чтобы он подгружал новые данные, при этом не открывая новые окна. Сейчас это выглядит в виде: пришел ответ - открывается новое окно с подгруженными данными, при этом старое окно остается открытым до конца работы программы. Написал реализацию метода doInBackground(), но уверен, что сделал все неправильно. Не могли бы вы помочь разобраться, как это лучше всего реализовать, а также исправить мой метод doInBackground(). Данные, при поступлении, записываются в HashMap и далее передаются в класс SimpleTableDemo.Заранее спасибо.
public class SimpleTableDemo extends JFrame {
private static final String[] columnNames = { "Судья", "Ответ" };
private final JTable table;
private static SwingWorker swingWorker;
public SimpleTableDemo() {
super("Test");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new GridLayout(1, 0));
table = new JTable(new Object[0][0], columnNames) {
@Override
public Class getColumnClass(int column) {
switch (column) {
case 1:
return String.class;
default:
return Object.class;
}
}
@Override
public boolean isCellEditable(int row, int col) {
return false;
}
};
table.setPreferredScrollableViewportSize(new Dimension(500, 80));
table.setFillsViewportHeight(true);
JScrollPane scrollPane = new JScrollPane(table);
add(scrollPane);
pack();
setVisible(true);
swingWorker = new SwingWorker() {
@Override
protected Object doInBackground() throws Exception {
Map<Object,String> newMap = new HashMap<Object, String>();
newMap = Server.getAnswerMap();
return newMap;
}
};
}
public void setData(Map<Object,String> map) {
Object[][] data = map.entrySet()
.stream()
.map(e -> new Object[] { e.getKey(), e.getValue() })
.toArray(Object[][]::new);
table.setModel(new DefaultTableModel(data, columnNames));
}
private static void start() {
SimpleTableDemo demo = new SimpleTableDemo();
Map<Object,String> map = new HashMap<>();
demo.setData(map);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(SimpleTableDemo::start);
}
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей