📄 frameswizard.java
字号:
/*
* Copyright (c) 2000-2005, University of Salford
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* Neither the name of the University of Salford nor the names of its
* contributors may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
/*
* FramesWizard.java
*
* Created on 25 June 2004, 10:48
*/
package issrg.editor.gui2.wizard;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
*
* @author james
*/
public class FramesWizard extends javax.swing.JFrame implements Wizard, issrg.editor.gui2.GUIConstants {
private WizardFrame[] frames;
private WizardData data;
private WizardFinalizer finalizer;
private int currentFrame;
private boolean[] showFinish;
private javax.swing.JButton nextButton;
private javax.swing.JButton backButton;
private javax.swing.JButton finishButton;
private javax.swing.JButton cancelButton;
private javax.swing.JButton helpButton;
private javax.swing.JPanel buttonPanel;
private javax.swing.JPanel infoPanel;
private javax.swing.JPanel mainPanel;
private int maxNameIndex;
private javax.swing.JLabel[] frameNames;
private String title;
//private WizardFrame wizardPanel;
/** Creates a new instance of FramesWizard */
public FramesWizard(String title,
WizardFrame[] frames,
WizardFinalizer finalizer) {
int maxNameLength = 0;
maxNameIndex = 0;
int curNameLength;
this.title = title;
this.frames = frames;
this.finalizer = finalizer;
this.currentFrame = 0;
for(int i = 0; i < this.frames.length; i++){
this.frames[i].setWizardParent(this);
}
this.showFinish = new boolean[this.frames.length];
this.frameNames = new javax.swing.JLabel[this.frames.length];
for(int i = 0; i < this.frameNames.length; i++){
this.frameNames[i] = new javax.swing.JLabel((i+1) + ". " + this.frames[i].getName());
if(i == frameNames.length-1) this.showFinish[i] = true;
else this.showFinish[i] = false;
if((curNameLength = this.frameNames[i].getText().length()) > maxNameLength){
maxNameLength = curNameLength;
maxNameIndex = i;
}
}
this.data = new WizardDataHash();
this.setSizes();
this.init();
this.setButtons();
}
public void cancelAction() {
this.dispose();
}
public void finishAction() {
try{
if(this.finalizer.performFinalAction(this.data))
this.dispose();
}
catch(WizardException we){
we.printStackTrace();
}
}
public void nextAction() {
if(this.validateComponents()){
if(this.currentFrame != frames.length-1){
this.currentFrame++;
this.setSelectedName();
this.setWizardPanel();
this.setButtons();
}
}
}
public void backAction() {
if(this.currentFrame != 0){
this.currentFrame--;
this.setSelectedName();
this.setWizardPanel();
this.setButtons();
}
}
public void helpAction() {
this.frames[this.currentFrame].displayHelp();
}
public void start() {
this.show();
}
public WizardData getWizardData() {
return this.data;
}
public void setWizardData(WizardData data) {
this.data = data;
}
private boolean validateComponents(){
WizardComponent[] comps = this.frames[this.currentFrame].getWizardComponents();
for(int i = 0; i < comps.length; i++){
if(!comps[i].validateComponent(this.data)){
this.frames[this.currentFrame].displayErrorMessage(comps[i].getValidationError());
return false;
}
}
return true;
}
private void init(){
this.setTitle(this.title);
this.setResizable(false);
this.buttonPanel = new javax.swing.JPanel();
this.buttonPanel.setLayout(new java.awt.BorderLayout());
this.mainPanel = new javax.swing.JPanel();
this.mainPanel.setLayout(new java.awt.GridBagLayout());
this.getContentPane().setLayout(new java.awt.GridBagLayout());
java.awt.GridBagConstraints gridBagConstraints = new java.awt.GridBagConstraints();
javax.swing.JPanel buttonInnerPanel = new javax.swing.JPanel();
this.backButton = new javax.swing.JButton();
backButton.setFont(BUTTON_FONT);
backButton.setText(java.util.ResourceBundle.getBundle("issrg/editor/gui2/wizard/Wizard_i18n").getString("back_button_text"));
backButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
backAction();
}
});
buttonInnerPanel.add(backButton);
this.nextButton = new javax.swing.JButton();
nextButton.setFont(BUTTON_FONT);
nextButton.setText(java.util.ResourceBundle.getBundle("issrg/editor/gui2/wizard/Wizard_i18n").getString("next_button_text"));
nextButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
nextAction();
}
});
buttonInnerPanel.add(nextButton);
this.finishButton = new javax.swing.JButton();
finishButton.setFont(BUTTON_FONT);
finishButton.setText(java.util.ResourceBundle.getBundle("issrg/editor/gui2/wizard/Wizard_i18n").getString("finish_button_text"));
finishButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
finishAction();
}
});
buttonInnerPanel.add(finishButton);
this.cancelButton = new javax.swing.JButton();
cancelButton.setFont(BUTTON_FONT);
cancelButton.setText(java.util.ResourceBundle.getBundle("issrg/editor/gui2/wizard/Wizard_i18n").getString("cancel_button_text"));
cancelButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
cancelAction();
}
});
buttonInnerPanel.add(cancelButton);
this.helpButton = new javax.swing.JButton();
helpButton.setFont(BUTTON_FONT);
helpButton.setText(java.util.ResourceBundle.getBundle("issrg/editor/gui2/wizard/Wizard_i18n").getString("help_button_text"));
helpButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
helpAction();
}
});
buttonInnerPanel.add(helpButton);
buttonPanel.add(buttonInnerPanel, java.awt.BorderLayout.EAST);
this.setWizardPanel();
this.initInfoPanel();
for(int i = 0; i < this.frames.length; i++)
{
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 0;
gridBagConstraints.insets = new java.awt.Insets(1,1,1,1);
this.frames[i].setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
this.mainPanel.add(this.frames[i], gridBagConstraints);
//javax.swing.JPanel cur = this.frames[i];
if(i == currentFrame) this.frames[i].setVisible(true);
else this.frames[i].setVisible(false);
}
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.insets = new java.awt.Insets(1,1,1,1);
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
this.infoPanel.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
this.mainPanel.add(infoPanel, gridBagConstraints);
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.insets = new java.awt.Insets(1,1,1,1);
gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTH;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
this.buttonPanel.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
this.getContentPane().add(buttonPanel, gridBagConstraints);
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
this.getContentPane().add(mainPanel, gridBagConstraints);
pack();
}
private void initInfoPanel(){
this.infoPanel = new javax.swing.JPanel();
int infoPanelWidth = this.infoPanel.getFontMetrics(SELECTED).stringWidth(this.frameNames[maxNameIndex].getText());
this.infoPanel.setPreferredSize(new java.awt.Dimension(infoPanelWidth+20, 0));
this.infoPanel.setBackground(java.awt.Color.WHITE);
this.infoPanel.setLayout(new java.awt.BorderLayout());
javax.swing.JPanel innerPanel = new javax.swing.JPanel();
innerPanel.setLayout(new java.awt.GridBagLayout());
innerPanel.setBackground(java.awt.Color.WHITE);
java.awt.GridBagConstraints gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
javax.swing.JLabel heading = new javax.swing.JLabel(java.util.ResourceBundle.getBundle("issrg/editor/gui2/wizard/Wizard_i18n").getString("steps_heading"));
heading.setFont(new java.awt.Font(FONT_NAME, 0, 12));
innerPanel.add(heading, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
javax.swing.JSeparator sep = new javax.swing.JSeparator();
sep.setForeground(new java.awt.Color(0, 0, 0));
sep.setPreferredSize(new java.awt.Dimension(100, 2));
innerPanel.add(sep, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
javax.swing.JSeparator sep2 = new javax.swing.JSeparator();
sep2.setPreferredSize(new java.awt.Dimension(0, 20));
innerPanel.add(sep2, gridBagConstraints);
for(int i = 0; i < this.frameNames.length; i++){
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = i+3;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
innerPanel.add(this.frameNames[i], gridBagConstraints);
}
javax.swing.JPanel outerPanel = new javax.swing.JPanel();
outerPanel.setLayout(new java.awt.BorderLayout());
outerPanel.setBackground(java.awt.Color.WHITE);
outerPanel.add(innerPanel, java.awt.BorderLayout.WEST);
this.infoPanel.add(outerPanel, java.awt.BorderLayout.NORTH);
this.setSelectedName();
pack();
}
private void setSelectedName(){
for(int i = 0; i < this.frameNames.length; i++){
if(i == this.currentFrame) this.frameNames[i].setFont(SELECTED);
else this.frameNames[i].setFont(UNSELECTED);
}
}
private void setButtons(){
if(this.currentFrame == this.frames.length-1) this.nextButton.setEnabled(false);
else this.nextButton.setEnabled(true);
if(this.currentFrame == 0) this.backButton.setEnabled(false);
else this.backButton.setEnabled(true);
this.finishButton.setEnabled(this.showFinish[this.currentFrame]);
}
private void setWizardPanel(){
for(int i = 0; i < this.frames.length; i++){
if(i == currentFrame) this.frames[i].setVisible(true);
else this.frames[i].setVisible(false);
}
WizardComponent[] comps = this.frames[currentFrame].getWizardComponents();
for(int i = 0; i < comps.length; i++){
comps[i].initailiseComponent(this.data);
}
}
private void setSizes(){
int minX = 300;
int minY = 300;
for(int i = 0; i < this.frames.length; i++){
WizardFrame wiz = this.frames[i];
java.awt.Dimension currentDim = wiz.getPreferredSize();
if(currentDim.width > minX) minX = currentDim.width;
if(currentDim.height > minY) minY = currentDim.height;
}
for(int j = 0; j < this.frames.length; j++){
this.frames[j].setPreferredSize(new java.awt.Dimension(minX, minY));
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -