Также, если вы используете сторонние библиотеки, убедитесь, что у вас есть правильные 32/64 битные файлы
Речь идет о том, «что» вы хотите достичь, что приведет к «как» ...
Например ...
Вы могли бы поддерживать ссылку на второй кадр в первом кадре и когда кнопка нажата, сообщите второму кадру, что произошло изменение ...
public class FirstFrame extends JFrame {
// Reference to the second frame...
// You will need to ensure that this is assigned correctly...
private SecondFrame secondFrame;
// The text field...
private JTextField textField;
/*...*/
// The action handler for the button...
public class ButtonActionHandler implements ActionListener {
public void actionPerformed(ActionEvent evt) {
secondFrame.setLabelText(textField.getText());
}
}
}
Проблема с этим заключается в том, что он SecondFrame
, позволяя ему делать противные вещи, например, удалять все компоненты, например.
Лучшим решением было бы предоставить серию интерфейсов, которые позволили бы двум классам разговаривать друг с другом ...
public interface TextWrangler {
public void addActionListener(ActionListener listener);
public void removeActionListener(ActionListener listener);
public String getText();
}
public class FirstFrame extends JFrame implements TextWrangler {
private JButton textButton;
private JTextField textField;
/*...*/
public void addActionListener(ActionListener listener) {
textButton.addActionListener(listener);
}
public void removeActionListener(ActionListener listener) {
textButton.removeActionListener(listener);
}
public String getText() {
return textField.getText();
}
}
public class SecondFrame extends JFrame {
private JLabel textLabel;
private JTextField textField;
private TextWrangler textWrangler;
public SecondFrame(TextWrangler wrangler) {
textWrangler = wrangler;
wrangler.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
textLabel.setText(textWrangler.getText());
}
});
/*...*/
}
}
В основном это ограничивает доступ к SecondFrame
. Хотя можно утверждать, что ActionListener
в SecondFrame
может использовать источник ActionEvent
, чтобы узнать больше информации по своей природе, это был бы ненадежный механизм, так как interface
не упоминает, как это должен быть реализован ...
Это основной пример Pattern наблюдателя