У меня проблема с программой, для которой я хочу создать пользовательский интерфейс. У него есть одна «модель», а точнее HDR-конвертер с определенным интерфейсом. Я должен прочитать несколько переменных с помощью Swing, а затем нужно передать их все в конвертер для преобразования изображения.
Я могу читать переменные и уже запрограммировал некоторые специальные слушатели и JPanels для пользовательского интерфейса. Проблема, с которой я столкнулся, заключается в том, как я могу получить всю информацию из разных возможностей ввода в одном месте, чтобы представить ее модели.
public class MainFrame extends javax.swing.JFrame {
private static final long serialVersionUID = 8971599546866585146L;
JButton loadDir = new JButton("LOAD DIR");
JButton runHDrize = new JButton("RUN Converter");
JButton saveHDR = new JButton("SAVE HDR");
JScrollBar inputScroller = new JScrollBar(JScrollBar.HORIZONTAL);
JPanel curve = initCurve();
JPanel mapping = initMapping();
JPanel lambda = initLambda();
JPanel samples = initSamples();
public MainFrame() {
this.setLayout(new GridBagLayout());
this.setSize(800, 700);
this.setResizable(false);
initFrame();
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void initFrame() {
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 1;
gbc.gridwidth = 1;
add(inputScroller, gbc);
gbc.gridx = 3;
gbc.gridy = 1;
add(saveHDR, gbc);
saveHDR.addActionListener(new OutputDialogListener(null)); //TODO Get image
gbc.gridx = 0;
gbc.gridy = 2;
add(curve, gbc);
gbc.gridx = 1;
gbc.gridy = 2;
gbc.gridwidth = 2;
add(samples, gbc);
samples.setVisible(true);
gbc.gridwidth = 1;
gbc.gridx = 3;
gbc.gridy = 2;
add(lambda, gbc);
lambda.setVisible(true);
gbc.gridx = 0;
gbc.gridy = 3;
add(mapping, gbc);
gbc.gridx = 1;
gbc.gridy = 3;
add(loadDir, gbc);
loadDir.addActionListener(new InputDialogListener());
gbc.gridx = 3;
gbc.gridy = 3;
add(runHDrize, gbc);
}
private JPanel initCurve() {
Code to initialize a JCombobox to choose which camera curve to use
}
private JPanel initMapping() {
Code to initialize a JCombobox with a description field over it to select the mapping used for conversion from HDR to RGB
}
private JPanel initLambda() {
Code to initialize a field turning red when an invalid value is entered
}
private JPanel initSamples() {
Code to initialize a slider with field showing current value above
}
}
Проблема, которую я хочу решить, состоит в том, как я могу получить все значения, когда «Run Converter» будет передан в модель, чтобы он мог преобразовать ее.
Я думал о программировании слушателя в «Run Converter», но не совсем знаю, как получить все данные. Должен ли я реализовать класс «Controller», который передается всем слушателям и сохраняет все данные, чтобы пользовательский интерфейс и «Run Converter» могли получить к нему доступ и прочитать его?
Или есть более элегантная версия, чем просто ссылка на всех слушателей?
Заранее спасибо за помощь! Если вам нужно больше моего кода или больше информации, просто спросите.
Редактировать: я не был уверен, стоит ли мне публиковать какой-то код, поэтому я просто опубликовал некоторые части своего основного класса GUI