Отображение данных с помощью SwingWorker

231
04 мая 2018, 13:55

столкнулся с одной вещью. У меня идут данные с телефона на компьютер и они отображаются в окне 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);
}

}

READ ALSO
Не получается отрисовать модель

Не получается отрисовать модель

Нужно определить находится ли треугольники модели(орел) внутри прямоугольной плоскостиНаписал программу, но отрисовка почему- то работает...

237
метод toString в классе BigDecimal

метод toString в классе BigDecimal

Листинг из JDK 18:

215
ImageView на весь экран

ImageView на весь экран

Всем приветКогда нажимаешь на картинку в приложении картинка открываеться в полный рост

178
Java SE, корректная запись строки байтовых символов в байтовый массив

Java SE, корректная запись строки байтовых символов в байтовый массив

Имеется Строка String Packet в которой записываетются данные а-ля FA0023CC и массив byte[] P = new byte[Packetlength()/2]в который нужно загнать данные по типу 0xFA 0x00 0x23 0xCC Пишу...

188