JavaSwing+derby通讯录
此通讯录为sun公司在2006年公布,它的优点有:
分层结构如上图
1.AddressFrame为主窗体它里面装入三个窗体AddressListPanel-AddressActionPanel-AddressPanel
2.AddressListPanel负责装入列表内容;AddressActionPanel负责按钮监听;AddressPanel负责编辑
3.AddressFrame负责连接数据库AddressDao
4.AddressDao又使用了Configuration.properties外部配置文件
总结:一:思路非常之清晰,就像一位朋友所说,拍《盗梦空间》的那位仁兄导演应该是学过编程的。
二:此系统看似很小,里面五脏俱全,如果每个语句与方法一句一句的分析与参透,将会受益非浅!
完整源码请在此下载:http://download.****.net/detail/youyigong/3779854 同时我将此打包,可以独立运行
import java.awt.BorderLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.net.URL;
import java.util.List;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class AddressFrame extends JFrame implements ActionListener, ListSelectionListener{
private AddressActionPanel addressActionPanel;
private AddressListPanel addressListPanel;
private AddressPanel addressPanel;
private AddressDao db;
private WindowAdapter windowAdapter;
private int selectedEntry = -1;
class WindowCloser extends WindowAdapter{
public void windowClosing(WindowEvent e){
db.disconnect();
}
}
public AddressFrame(){
initComponents();
loadFrameIcon();
windowAdapter = new WindowCloser();
this.addWindowListener(windowAdapter);
db = new AddressDao();
db.connect();
addressActionPanel.addActionListener(this);
addressPanel.setEditable(false);
List<ListEntry> entries = db.getListEntries();
addressListPanel.addListEntries(entries);
addressListPanel.addListSelectionListener(this);
}
private void loadFrameIcon() {//设置软件图标
URL imgUrl = null;
ImageIcon imgIcon = null;
imgUrl = AddressFrame.class.getResource("icon/5.png");
imgIcon = new ImageIcon(imgUrl);
Image img = imgIcon.getImage();
this.setIconImage(img);
}
private void initComponents() {//所有控件添加至主窗体
addressActionPanel = new AddressActionPanel();
addressListPanel = new AddressListPanel();
addressPanel = new AddressPanel();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setTitle("通讯录(derby版)");
this.getContentPane().add(addressActionPanel, BorderLayout.SOUTH);
this.getContentPane().add(addressPanel,BorderLayout.CENTER);
this.getContentPane().add(addressListPanel,BorderLayout.WEST);
pack();
}
private void cancelAddress(){//取消按钮
addressPanel.clear();
addressPanel.setEditable(false);
ListEntry entry = addressListPanel.getSelectedListEntry();
if(entry != null){
int id = entry.getId();
Address address = db.getAddress(id);
addressPanel.setAddress(address);
}
}
private void newAddress(){//新建时
addressPanel.clear();
addressPanel.setEditable(true);
}
private void deleteAddress(){
int id = addressPanel.getId();
if(id != -1){
db.deleteRecord(id);
int selectedIndex = addressListPanel.deleteSelectedEntry();
if(selectedIndex >= 0 ){
selectedIndex = addressListPanel.setSelectedIndex(selectedIndex);
ListEntry entry = addressListPanel.getSelectedListEntry();
if(entry != null){
id = entry.getId();
Address address = db.getAddress(id);
addressPanel.setAddress(address);
}else{
addressPanel.clear();
}
}
}else{
addressPanel.clear();
}
addressPanel.setEditable(false);
}
private void editAddress(){//编辑时
int selected = addressListPanel.getSelectedIndex();
if(selected > 0){//只要选择还有
addressPanel.setEditable(true);
}
}
private void saveAddress() {
if (addressPanel.isEditable()) {
Address address = addressPanel.getAddress();
int id = address.getId();
String lname = address.getLastName();
String fname = address.getFirstName();
String mname = address.getMiddleName();
if (id == -1) {
id = db.saveRecord(address);
address.setId(id);
ListEntry entry = new ListEntry(lname, fname, mname, id);
addressListPanel.addListEntry(entry);
} else {
db.editRecord(address);
ListEntry entry = addressListPanel.getSelectedListEntry();
entry.setFirstName(fname);
entry.setMiddleName(mname);
entry.setLastName(lname);
addressListPanel.repaint();
}
addressPanel.setEditable(false);
}
}
public void actionPerformed(ActionEvent e) {
String actionCommand = e.getActionCommand();
System.out.println("ActionEvent: " + actionCommand);
if (actionCommand.equalsIgnoreCase("CANCEL_ADDRESS")) {
cancelAddress();
} else if (actionCommand.equalsIgnoreCase("NEW_ADDRESS")) {
newAddress();
} else if (actionCommand.equalsIgnoreCase("DELETE_ADDRESS")) {
deleteAddress();
} else if (actionCommand.equalsIgnoreCase("EDIT_ADDRESS")) {
editAddress();
} else if (actionCommand.equalsIgnoreCase("SAVE_ADDRESS")) {
saveAddress();
}
}
@Override
public void valueChanged(ListSelectionEvent e) {
if (e.getValueIsAdjusting()) {
return;
}
JList entryList = (JList) e.getSource();
selectedEntry = entryList.getSelectedIndex();
ListEntry entry = (ListEntry)entryList.getSelectedValue();
if (entry != null) {
int id = entry.getId();
Address address = db.getAddress(id);
addressPanel.setAddress(address);
} else {
addressPanel.clear();
}
}
public static void main(String[] args) {
AddressFrame app = new AddressFrame();
app.setVisible(true);
}
}