Почему добавление неопределенного JProgressBar в JTable убивает анимацию? ⇐ JAVA
Почему добавление неопределенного JProgressBar в JTable убивает анимацию?
Я возвращаю пользовательский интерфейс JavaFX к Swing. В пользовательском интерфейсе у меня есть таблица задач с индикаторами выполнения. Если задача имеет неопределенную длину, я бы хотел использовать неопределенный индикатор выполнения. К сожалению, я не могу понять, как анимировать неопределенный индикатор выполнения, находясь внутри таблицы.
GPT-4 очень «полез» при изучении этого веб-сайта и предоставил мне всевозможные примеры, которые не работают.
Я создал пример ниже. Он рисует пользовательский интерфейс с анимацией неопределенного индикатора выполнения. Каждые 5 секунд в таблицу добавляется полоса, чередующаяся между новой и анимированной вверху.
В таблице ничего не анимируется. Более того, если я добавлю панель сверху к таблице, она также перестанет анимироваться вверху.
Что происходит?
import java.awt.BorderLayout; импортировать java.awt.Component; импортировать java.awt.Dimension; импортировать java.awt.EventQueue; импортировать javax.swing.JFrame; импортировать javax.swing.JPanel; импортировать javax.swing.JProgressBar; импортировать javax.swing.JScrollPane; импортировать javax.swing.JTable; импортировать javax.swing.UIManager; импортировать javax.swing.table.DefaultTableModel; импортировать javax.swing.table.TableCellRenderer; импортировать javax.swing.table.TableColumnModel; @SuppressWarnings("последовательный") публичный класс TestSwing расширяет JPanel и реализует TableCellRenderer { String[] заголовок = {"Прогресс"}; DefaultTableModel tableModel = новая DefaultTableModel (нуль, заголовок) { @Override общественный класс getColumnClass (int col) { return getValueAt(0, col).getClass(); } }; Таблица JTable = новый JTable(tableModel); JProgressBar bar = новый JProgressBar(); публичный TestSwing() { bar.setIndeterminate(истина); TableColumnModel columnsModel = table.getColumnModel(); columnsModel.getColumn(0).setCellRenderer(this); setLayout (новый BorderLayout()); добавить (бар, BorderLayout.NORTH); Прокрутка JScrollPane = новая JScrollPane (таблица); Scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); добавить (прокрутка, BorderLayout.CENTER); } @Override общедоступный компонент getTableCellRendererComponent (таблица JTable, значение объекта, логическое значение isSelected, логическое значение hasFocus, строка int, столбец int) { возвратная планка; } защищенное недействительное обновление() { в то время как (истина) { пытаться { Thread.sleep(5000); } catch (Исключение е) {}; EventQueue.invokeLater(() -> { tableModel.addRow(new Object[] {Boolean.TRUE}); }); } } public static void main(String[] args) выдает исключение { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); EventQueue.invokeLater(новый Runnable() { @Override общественный недействительный запуск () { JFrame f = новый JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Список TestSwing = новый TestSwing(); f.add(список); f.setSize(новое измерение(300, 500)); f.setLocationRelativeTo(null); f.setVisible(истина); Средство обновления потока = new Thread(() -> list.update(), «List Updater»); updater.setDaemon(истина); обновление.start(); } }); } } Этот вопрос появлялся на этом сайте несколько раз: Я попробовал обновить модель таблицы, как было предложено в одном принятом ответе. Я попробовал перерисовать таблицу, как предложил другой. Я даже пытался заставить TableCellRenderer возвращать другую полосу для неопределенных строк в качестве принятого ответа третьего.
Наконец, решая эту игрушечную задачу, я понял, что после добавления в таблицу даже функционирующая неопределенная полоса перестанет анимироваться.
Если это работает на вашей виртуальной машине, сообщите мне, что вы используете. Ни на одном из моих он не работает.
Я возвращаю пользовательский интерфейс JavaFX к Swing. В пользовательском интерфейсе у меня есть таблица задач с индикаторами выполнения. Если задача имеет неопределенную длину, я бы хотел использовать неопределенный индикатор выполнения. К сожалению, я не могу понять, как анимировать неопределенный индикатор выполнения, находясь внутри таблицы.
GPT-4 очень «полез» при изучении этого веб-сайта и предоставил мне всевозможные примеры, которые не работают.
Я создал пример ниже. Он рисует пользовательский интерфейс с анимацией неопределенного индикатора выполнения. Каждые 5 секунд в таблицу добавляется полоса, чередующаяся между новой и анимированной вверху.
В таблице ничего не анимируется. Более того, если я добавлю панель сверху к таблице, она также перестанет анимироваться вверху.
Что происходит?
import java.awt.BorderLayout; импортировать java.awt.Component; импортировать java.awt.Dimension; импортировать java.awt.EventQueue; импортировать javax.swing.JFrame; импортировать javax.swing.JPanel; импортировать javax.swing.JProgressBar; импортировать javax.swing.JScrollPane; импортировать javax.swing.JTable; импортировать javax.swing.UIManager; импортировать javax.swing.table.DefaultTableModel; импортировать javax.swing.table.TableCellRenderer; импортировать javax.swing.table.TableColumnModel; @SuppressWarnings("последовательный") публичный класс TestSwing расширяет JPanel и реализует TableCellRenderer { String[] заголовок = {"Прогресс"}; DefaultTableModel tableModel = новая DefaultTableModel (нуль, заголовок) { @Override общественный класс getColumnClass (int col) { return getValueAt(0, col).getClass(); } }; Таблица JTable = новый JTable(tableModel); JProgressBar bar = новый JProgressBar(); публичный TestSwing() { bar.setIndeterminate(истина); TableColumnModel columnsModel = table.getColumnModel(); columnsModel.getColumn(0).setCellRenderer(this); setLayout (новый BorderLayout()); добавить (бар, BorderLayout.NORTH); Прокрутка JScrollPane = новая JScrollPane (таблица); Scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); добавить (прокрутка, BorderLayout.CENTER); } @Override общедоступный компонент getTableCellRendererComponent (таблица JTable, значение объекта, логическое значение isSelected, логическое значение hasFocus, строка int, столбец int) { возвратная планка; } защищенное недействительное обновление() { в то время как (истина) { пытаться { Thread.sleep(5000); } catch (Исключение е) {}; EventQueue.invokeLater(() -> { tableModel.addRow(new Object[] {Boolean.TRUE}); }); } } public static void main(String[] args) выдает исключение { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); EventQueue.invokeLater(новый Runnable() { @Override общественный недействительный запуск () { JFrame f = новый JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Список TestSwing = новый TestSwing(); f.add(список); f.setSize(новое измерение(300, 500)); f.setLocationRelativeTo(null); f.setVisible(истина); Средство обновления потока = new Thread(() -> list.update(), «List Updater»); updater.setDaemon(истина); обновление.start(); } }); } } Этот вопрос появлялся на этом сайте несколько раз: Я попробовал обновить модель таблицы, как было предложено в одном принятом ответе. Я попробовал перерисовать таблицу, как предложил другой. Я даже пытался заставить TableCellRenderer возвращать другую полосу для неопределенных строк в качестве принятого ответа третьего.
Наконец, решая эту игрушечную задачу, я понял, что после добавления в таблицу даже функционирующая неопределенная полоса перестанет анимироваться.
Если это работает на вашей виртуальной машине, сообщите мне, что вы используете. Ни на одном из моих он не работает.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Процесс рендеринга webView (11521) убивает (OOM или обновление), убивает приложение
Anonymous » » в форуме Android - 0 Ответы
- 33 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как я могу сделать индикатор выполнения с помощью JProgressBar из Swing в Java?
Anonymous » » в форуме JAVA - 0 Ответы
- 18 Просмотры
-
Последнее сообщение Anonymous
-