import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;
/**
* Wizard
* @author noxan
* @since 0.0.5
* @version 0.0.7
*/
public class JWizard extends JFrame {
private static final long serialVersionUID = 1L;
public static void main(String[] args) {
try { //look & feel
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch(Exception e) {
}
ArrayList<JPanel> p = new ArrayList<JPanel>();
JPanel panel1 = new JPanel();
panel1.setLayout(new BorderLayout());
panel1.add(new JScrollPane(new JTextArea("HelloWorld...")), BorderLayout.CENTER);
p.add(panel1);
JPanel panel2 = new JPanel();
panel2.add(new JLabel("test 2"));
p.add(panel2);
new JWizard("JWizard Demo", "This is a test!", p);
}
private JButton nextButton;
private JButton backButton;
private JButton cancelButton;
private JPanel container;
private String title;
private String desc;
private ArrayList<JPanel> panels;
private int currentPanel;
public JWizard(String title, String desc, ArrayList<JPanel> panels) {
this.title = title;
this.desc = desc;
this.panels = panels;
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
setTitle(title);
setLayout(new BorderLayout());
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
cancel();
}
});
initComponents();
if(panels==null||panels.size()<1) {
container.add(new JLabel("Empty Setup..."));
nextButton.setEnabled(false);
backButton.setEnabled(false);
} else {
updateButtons();
updatePanel();
}
setLocation(100, 100);
setLocationByPlatform(true);
setSize(550, 380);
setVisible(true);
}
private void initComponents() {
//top
JPanel topPanel = new JPanel();
topPanel.setLayout(new BorderLayout());
topPanel.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, Color.BLACK));
JLabel textLabel = new JLabel("<html><font size=\"5\">"+title+"</font><br>"+desc+"</html>");
textLabel.setOpaque(true);
textLabel.setBackground(Color.WHITE);
textLabel.setBorder(new EmptyBorder(5, 5, 5, 5));
topPanel.add(textLabel, BorderLayout.CENTER);
JLabel iconLabel = new JLabel(new ImageIcon(ClassLoader.getSystemResource("jkit/img/logo.png")));
iconLabel.setPreferredSize(new Dimension(60, 60));
iconLabel.setOpaque(true);
iconLabel.setBackground(Color.WHITE);
topPanel.add(iconLabel, BorderLayout.EAST);
add(topPanel, BorderLayout.NORTH);
//bottom
JPanel bottomPanel = new JPanel();
bottomPanel.setLayout(new FlowLayout(FlowLayout.RIGHT, 5, 2));
backButton = new JButton("Back", new ImageIcon(ClassLoader.getSystemResource("jkit/img/back.png")));
backButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
backButtonActionPerformed();
}
});
bottomPanel.add(backButton);
nextButton = new JButton("Next", new ImageIcon(ClassLoader.getSystemResource("jkit/img/next.png")));
nextButton.setHorizontalTextPosition(JButton.LEFT);
nextButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
nextButtonActionPerformed();
}
});
bottomPanel.add(nextButton);
cancelButton = new JButton("Cancel", new ImageIcon(ClassLoader.getSystemResource("jkit/img/cancel.png")));
cancelButton.setHorizontalTextPosition(JButton.LEFT);
cancelButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
cancel();
}
});
bottomPanel.add(cancelButton);
add(bottomPanel, BorderLayout.SOUTH);
//container
container = new JPanel();
add(container, BorderLayout.CENTER);
}
private void nextButtonActionPerformed() {
if(nextButton.getText().equals("Finish")) {
dispose();
} else {
currentPanel++;
updatePanel();
updateButtons();
}
}
private void backButtonActionPerformed() {
currentPanel--;
updatePanel();
updateButtons();
}
private void updatePanel() {
container.removeAll();
container.setLayout(new BorderLayout());
container.add(panels.get(currentPanel), BorderLayout.CENTER);
container.validate();
container.repaint();
}
private void updateButtons() {
if(currentPanel>=(panels.size()-1)) { //finish
nextButton.setText("Finish");
} else {
nextButton.setText("Next");
}
if(currentPanel<=0) {
backButton.setEnabled(false);
} else {
backButton.setEnabled(true);
}
}
private void cancel() {
final String message = "Sind Sie sicher, dass Sie diesen Setup wirklich beenden wollen?";
if(JOptionPane.YES_OPTION==JOptionPane.showConfirmDialog(this, message, title, JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE)) {
dispose();
}
}
}