关于swing项目开发浅论<一>
由于工作最近接手一个swing项目,开发周期为一年,也算是不大不小的项目,而且项目由我来负责,(*^__^*) 嘻嘻……,我将我开发与管理的心得写下,欢迎各位高手和前辈批评指正。
项目开发前的准备:
a:首先对工具的现在,eclispe,netbeans,jb等,对于eclipse我们需要装一个插件swt-designer ,netbeans可以直接开发,sun公司为我们做好了,需要说的是eclipse不支持动态布局,但是将netbeans下的项目import到 eclipse下是可以运行的。
b:对于swing项目来说,没有一个好的命名规范,特别是在多人参加开发,那将是很槽糕的,swing中有大量的组件用起来也很麻烦,这里我写一个简单例子,比如,JTextField txtFieldName, JTextArea txtBlog,等,这样可以便于开发和交流。
c:对于工具的确定,netbeans做界面的开发比较好的选择但是对于后台的开发就显弱势了。在这里我选择eclipse作后台开发,最后将开发好的程序打jar文件最后再导入netbeans中。
项目开发的相关设计:
对于swing做界面来说,并不是我们想象的那么容易,比如说我们在netbeans中画好了所有的界面,在你打开界面的源文件时你会发现这个文件很庞大,可能有上万行代码或者更多,当你读这个代码时也许会感觉茫然的哦。甚至有砸电脑的想法,当维护的人员看到这样的代码,我们是可以想象当时的情景,还有,在swing中也有很多复杂的事件,对我们开发人员的本身也是一种挑战,我们必须在上万行代码中翻来找去,有没有什么好的办法来解决了。其实是有的。
我们开发其实是面对组件开发,然后将各个组件综合在一起就成了我们所需要的软件,当我们开发中肯定会遇到这样或者那样的
JPane ,JFrom JTable等,我们可以将一个个的jpane,jfrom jtable 重新组合中我们自己的组件以便复用,最后我们再这些组件综合在主要的Pane中下面的例子是我用netbeans开发的:
/*
* SingleJpane.java
*
* Created on 2008年11月21日, 下午1:43
*/
package org.flybird.plat;
/**
*
* @author Administrator
*/
public class SingleJpane extends javax.swing.JPanel {
/** Creates new form SingleJpane */
public SingleJpane() {
initComponents();
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
txtfieldName = new javax.swing.JTextField();
labelName = new javax.swing.JLabel();
labelPassword = new javax.swing.JLabel();
pwdPassword = new javax.swing.JPasswordField();
btnSave = new javax.swing.JButton();
setName("Form"); // NOI18N
org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(singlepane.SinglePaneApp.class).getContext().getResourceMap(SingleJpane.class);
txtfieldName.setText(resourceMap.getString("txtfieldName.text")); // NOI18N
txtfieldName.setName("txtfieldName"); // NOI18N
labelName.setText(resourceMap.getString("labelName.text")); // NOI18N
labelName.setName("labelName"); // NOI18N
labelPassword.setText(resourceMap.getString("labelPassword.text")); // NOI18N
labelPassword.setName("labelPassword"); // NOI18N
pwdPassword.setText(resourceMap.getString("pwdPassword.text")); // NOI18N
pwdPassword.setName("pwdPassword"); // NOI18N
btnSave.setText(resourceMap.getString("btnSave.text")); // NOI18N
btnSave.setName("btnSave"); // NOI18N
org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(layout.createSequentialGroup()
.add(19, 19, 19)
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
.add(btnSave)
.add(layout.createSequentialGroup()
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
.add(labelPassword)
.add(labelName))
.add(18, 18, 18)
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false)
.add(txtfieldName)
.add(pwdPassword))))
.addContainerGap(214, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(layout.createSequentialGroup()
.add(56, 56, 56)
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
.add(labelName)
.add(txtfieldName, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.add(34, 34, 34)
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
.add(labelPassword)
.add(pwdPassword, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.add(28, 28, 28)
.add(btnSave)
.addContainerGap(125, Short.MAX_VALUE))
);
}// </editor-fold>
// Variables declaration - do not modify
private javax.swing.JButton btnSave;
private javax.swing.JLabel labelName;
private javax.swing.JLabel labelPassword;
private javax.swing.JPasswordField pwdPassword;
private javax.swing.JTextField txtfieldName;
// End of variables declaration
}
下面是一个主要的mainPane
/*
* SinglePaneView.java
*/
package singlepane;
import org.jdesktop.application.Action;
import org.jdesktop.application.ResourceMap;
import org.jdesktop.application.SingleFrameApplication;
import org.jdesktop.application.FrameView;
import org.jdesktop.application.TaskMonitor;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;
import javax.swing.Icon;
import javax.swing.JDialog;
import javax.swing.JFrame;
import org.flybird.plat.SingleJpane;
/**
* The application's main frame.
*/
public class SinglePaneView extends FrameView
{
public SinglePaneView(SingleFrameApplication app) {
super(app);
initComponents();
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
mainPanel = new javax.swing.JPanel();
mainPabbedPane = new javax.swing.JTabbedPane();
this.singleJpane = new SingleJpane();
savePanel = new javax.swing.JPanel();
mainPanel.setName("mainPanel"); // NOI18N
mainPabbedPane.setName("mainPabbedPane"); // NOI18N
savePanel.setName("savePanel"); // NOI18N
org.jdesktop.layout.GroupLayout savePanelLayout = new org.jdesktop.layout.GroupLayout(savePanel);
savePanel.setLayout(savePanelLayout);
savePanelLayout.setHorizontalGroup(
savePanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(0, 371, Short.MAX_VALUE)
);
savePanelLayout.setVerticalGroup(
savePanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(0, 273, Short.MAX_VALUE)
);
org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(singlepane.SinglePaneApp.class).getContext().getResourceMap(SinglePaneView.class);
mainPabbedPane.addTab(resourceMap.getString("savePanel.TabConstraints.tabTitle"), savePanel); // NOI18N
mainPabbedPane.addTab("single", this.singleJpane);
org.jdesktop.layout.GroupLayout mainPanelLayout = new org.jdesktop.layout.GroupLayout(mainPanel);
mainPanel.setLayout(mainPanelLayout);
mainPanelLayout.setHorizontalGroup(
mainPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(mainPanelLayout.createSequentialGroup()
.add(mainPabbedPane, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 376, Short.MAX_VALUE)
.add(24, 24, 24))
);
mainPanelLayout.setVerticalGroup(
mainPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(org.jdesktop.layout.GroupLayout.TRAILING, mainPanelLayout.createSequentialGroup()
.add(20, 20, 20)
.add(mainPabbedPane, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 300, Short.MAX_VALUE))
);
setComponent(mainPanel);
}// </editor-fold>
// Variables declaration - do not modify
private javax.swing.JTabbedPane mainPabbedPane;
private javax.swing.JPanel mainPanel;
private javax.swing.JPanel savePanel;
// End of variables declaration
private SingleJpane singleJpane;
}
上面有我的开发样例,请注意蓝色粗体部分。
在swing开发中刚才是最基本的问题,我们会面临,事件,内部类,匿名类,多线程,和swing MVC等一些高级应用,在下篇我会一一介绍到,并且讲述我在项目中的应用。
我的msn是:flyingandrunning@hotmail.com
相关资源:CRM项目管理浅论