Этот...
private void buttonBActionPerformed(java.awt.event.ActionEvent evt) {
frameA a= new frameA();
a.getProgressbar().setIndeterminate(true);
}
Не сработает, вы только что создали еще один невидимый экземпляр frameA
. Он не имеет отношения к фрейму, который в данный момент открыт.
Есть множество способов добиться этого...
Вы могли бы...
Передайте ссылку frameA
на frameB
как часть вызова конструктора для frameB
. Затем в вашем методе actionPerformed
вы просто используете эту ссылку для изменения состояния индикатора выполнения.
Но это создаст тесную связь между frameA
и frameB
, что значительно уменьшит повторное использование frameB
.
Вы могли бы...
Обеспечьте средства, с помощью которых заинтересованная сторона может прикрепить ActionListener
к frameB
, которые будут срабатывать при нажатии кнопки.
Это предполагает рабочий процесс и предоставляет компоненты внешним источникам (через ActionEvent#getSource
), что может позволить людям изменить ваш компонент...
Возможно, вам следует...
Запустить событие PropertyChanged
.
Это, наверное, самый простой и безопасный из всех вариантов, которые я придумал. Использование прослушивателя изменения свойств таким образом означает, что вам не нужно выставлять напоказ JProgressBar
, JButton
или создавать тесную связь между двумя кадрами.
Поддержка изменения свойств встроена в Container
, поэтому она есть у всех компонентов/элементов управления.
Например, вы прикрепите PropertyChangeListener
к b
при его построении.
b = new frameB();
b.addPropertyChangeListener(new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
if (evt.getPropertyName().equals("progressState")) {
progressbar.setIndeterminate((Boolean)evt.getNewValue());
}
}
});
Добавьте метод bFrame
actionPerformed
, вы просто вызовете...
firePropertyChange("progressState", false, true);
Когда вы хотите установить неопределенное состояние (вы можете поменять местами значения boolean
, чтобы сбросить его, если хотите)
person
MadProgrammer
schedule
05.04.2013