Java — отображение статической панели выбора файлов и динамической панели флажков в одном графическом интерфейсе

Я работаю над проектом колледжа, чтобы позволить пользователю выбирать файл csv с помощью средства выбора файлов в графическом интерфейсе, а затем отображать флажок для каждого столбца файла.

У меня есть внутренний код, написанный для обработки любого количества столбцов, но проблема, с которой я сталкиваюсь, заключается в отображении флажков. Я подошел к этому так: поместил средство выбора файлов на одну панель, а флажки — на вторую с намерением добавить вторую панель, сделав ее видимой, из метода actionListener после того, как файл будет прочитан.

Однако без заполнения массива имен флажков при первой настройке графического интерфейса я не могу отобразить флажки.

С тех пор я пытался использовать как макет с вкладками макет с вкладками, так и макет карты и прочитать о макете мастера, но из того, что я видел , все эти компоненты были инициализированы, а прослушиватели действий просто устанавливали их видимыми/невидимыми?

На этом этапе я начинаю задаваться вопросом, возможно ли вообще сделать это в одном графическом интерфейсе или как я могу решить проблему с двумя графическими интерфейсами.

Я использую java только 3 месяца, и любые указатели в правильном направлении были бы огромной помощью, спасибо!


person rafferb    schedule 13.03.2012    source источник


Ответы (2)


Рассмотреть возможность

  • Чтение файла CSV в методе doInBackground SwingWorker, чтобы не замораживать поток событий
  • Вы можете получить уведомление графического интерфейса, когда SwingWorker будет выполнен, добавив PropertyChangeListener в SwingWorker и проверив, является ли свойство PropertyChangeEvent «состоянием», а его новое значение — SwingWorker.StateValue.DONE.
  • Получив имена столбцов, вы можете динамически создавать свои JCheckBox и добавлять их в JPanel, использующую GridLayout. В Swing нет ограничений на динамическое создание компонентов.
  • Затем отобразите эту JPanel в графическом интерфейсе либо с помощью CardLayout, либо добавив ее в отображаемый контейнер, либо отобразив ее в диалоговом окне, таком как JDialog или JOptionPane. Опять же, в Swing нет ограничений на это.
  • Обязательно revalidate() и repaint() любой измененный контейнер или вызов pack() в JFrame, если вам нужно изменить его размер (не рекомендуется, если это вообще возможно).
person Hovercraft Full Of Eels    schedule 13.03.2012
comment
Я думаю, что это похоже на то, что мне нужно, я смогу прочитать файл только после того, как пользователь выберет его с помощью fileChooser, поэтому я должен вызвать метод doInBackground из actionListener на fileChooser? edit - это первый созданный мной графический интерфейс, который не был запущен в основном потоке. - person rafferb; 14.03.2012
comment
@rafferb: вы хотели бы прочитать об использовании SwingWorkers (отметьте Параллелизм в Swing). Вы никогда не вызываете метод doInBackground(). Вы вызываете его метод execute() аналогично тому, как вы почти никогда не вызываете метод run() Thread или Runnable, а скорее вызываете метод start() Thread. - person Hovercraft Full Of Eels; 14.03.2012
comment
Спасибо за это, надеюсь, я разберусь с этим! - person rafferb; 14.03.2012

I'm working on a college project to allow a user select a csv file via a 
file chooser in a GUI and then display a checkbox for each column of the file.

I have the back end code written to handle any number of columns but the 
problem I'm having is displaying the checkboxes.

cvs file представляет структуру таблиц, используйте JTable, а не занимайтесь размещением тонн из JComponents в графический интерфейс, в JTable представляют JCheckBox только Boolean значение

person mKorbel    schedule 13.03.2012
comment
@rafferb: это предложение намного лучше моего. 1+ - person Hovercraft Full Of Eels; 14.03.2012
comment
Спасибо, может быть я ошибаюсь, но таблица, казалось бы, отображает данные в файле? Причина, по которой я использовал флажки, заключается в том, что остальная часть программы будет выводить график в отдельном графическом интерфейсе для каждого из выбранных столбцов, а столбцы могут иметь сотни значений строк! - person rafferb; 14.03.2012