Вывод данных с использованием SwingWorker - PullRequest
0 голосов
/ 03 мая 2018

Я столкнулся с одной вещью. У меня есть данные с телефона на компьютер, и они отображаются в окне 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() {
        // I need help in this method
            @Override
            protected Object doInBackground() throws Exception {
                Thread.sleep(1000);
                return true;
            }
        };
    }
    //Receive data from another class
    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));
    }
    // setData in JFrame 
    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);
    }
}
...