Например, создайте интерфейс Verifiable с логическим методом isDataValid()
:
interface Verifiable {
boolean isDataValid();
}
и попросите классы панели реализовать интерфейс, чтобы каждая панель могла проверять свои собственные данные.
class Window1 extends JPanel implements Verifiable {
JTextField txtUsername = new JTextField();
JPasswordField txtPassword = new JPasswordField();
public Window1() {
init();
}
private void init() {
setLayout(new GridLayout(2, 2));
JLabel lblUsername = new JLabel("Username:", JLabel.CENTER);
JLabel lblPassword = new JLabel("Password:", JLabel.CENTER);
add(lblUsername);
add(txtUsername);
add(lblPassword);
add(txtPassword);
String title = "Use \"foo\" and \"bar\"";
setBorder(BorderFactory.createTitledBorder(title ));
}
@Override
public boolean isDataValid() {
return txtUsername.getText().equals("foo") &&
java.util.Arrays.equals(txtPassword.getPassword(), "bar".toCharArray());
}
}
Затем убедитесь, что данные текущей отображаемой панели действительны в следующем и предыдущем ActionListener JButton.
nextButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
Verifiable verifiable = null;
Component[] contents = contentPane.getComponents();
for (Component component : contents) {
if (component.isVisible() && component instanceof Verifiable) {
verifiable = (Verifiable) component;
}
}
if (verifiable != null && verifiable.isDataValid()) {
CardLayout cardLayout = (CardLayout) contentPane.getLayout();
cardLayout.next(contentPane);
}
}
});