首页 > 代码库 > JAVA程序设计(14.3)----- 图书馆管理系统 初步设计 界面篇~借书目录查看窗口,新书添加窗口

JAVA程序设计(14.3)----- 图书馆管理系统 初步设计 界面篇~借书目录查看窗口,新书添加窗口

1.就地实例化,表格,表格滚动条,有滚动条自动出现抬头,表格model 2.新增窗口,上下调节的输入框,这种输入框中的数据获取方法,输入框部件设置,重置输入框内容

注意与主窗口通用一个BookManager……刚开始就因为在此窗口new了一个manager弄死加不进去……还不会报错…………

1 的代码先是主窗口   可以显示所有藏书 按钮2个 新增和删除  只做好了新增的

package com.lovo.ui;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.table.DefaultTableModel;

import com.lovo.BookManager.Book;
import com.lovo.BookManager.BookManager;
/**
 * 租赁图书查看界面
 * @author Abe
 */
@SuppressWarnings("serial")
public class MyTable extends JFrame {
	private BookManager manager = new BookManager();
	private JTable bookTabel;
	private String[] columnNames = { "编号", "书名", "价格", "状态", "借出日期", "借出次数" };

	private JPanel myPanel = new JPanel();
	private JButton newButton;
	private JButton resectButton;
	
	/**
	 * 构造器,初始化
	 */
	public MyTable() {
		this.setSize(600, 400);
		this.setResizable(false);
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setLocationRelativeTo(null);

		initComponents();
	}
	
	/**
	 * 方法:获得该类使用的manager
	 * @return
	 */
	public BookManager getBookManager(){
		return manager;
	}
	
	/**
	 * 方法:获得manager中说有书的属性,保存在Object[][]中
	 */
	public void refreshTableModel(){
		if (bookTabel != null) {
			List<Book> list = manager.findAll();
			Object[][] date = new Object[list.size()][columnNames.length];
			for (int i = 0; i < list.size(); i++) {
				Book temp = list.get(i);
				date[i][0] = temp.getIsbn();
				date[i][1] = temp.getName();
				date[i][2] = temp.getPrice();
				date[i][3] = temp.isLended() ? "借出" : "未借出";
				date[i][4] = temp.getLendDate();
				date[i][5] = temp.getCounter();
			}
			// 创造一个匿名内部类 就地实例化里面的方法 来设置表格的模型 并将数据放入表格
			bookTabel.setModel(new DefaultTableModel(date, columnNames) {
				@Override
				public boolean isCellEditable(int row, int colum) {
					return false;
				}
			});
		}
	}
	
	

	public void initComponents() {
		bookTabel = new JTable();// JTable 表格
		bookTabel.getTableHeader().setReorderingAllowed(false);// 设置表头不允许重新排列
		
		refreshTableModel();

		JScrollPane jsp = new JScrollPane(bookTabel);	//不是新增一个这货,直接在new里添加要修饰的表格
														//将表格加上滚动条 保存在jsp
		this.add(jsp, BorderLayout.CENTER);				//将jsp放入 窗口中间区域

		newButton = new JButton("新增");
		newButton.addActionListener(new ActionListener() {	//就地实例化的监听器
		@Override
			public void actionPerformed(ActionEvent e) {
				if(e.getSource() == newButton){
					new AddBookDialog(MyTable.this).setVisible(true);	//把自己传给新增窗口,新增窗口设置成可见
				}
			}
		});
		resectButton = new JButton("删除");
		
		myPanel.add(newButton);
		myPanel.add(resectButton);
		this.add(myPanel, BorderLayout.SOUTH);
	}
	
	//main方法 主窗口可见 设置UI为和现在的系统一样  throws为 系统自动生成……
	public static void main(String[] args) throws ClassNotFoundException,
			InstantiationException, IllegalAccessException,
			UnsupportedLookAndFeelException {
		UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		new MyTable().setVisible(true);
	}
}

2.新增窗口的代码

package com.lovo.ui;

import java.awt.Component;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JSpinner;
import javax.swing.JTextField;
import javax.swing.SpinnerModel;
import javax.swing.SpinnerNumberModel;
import javax.swing.UIManager;

import com.lovo.BookManager.Book;
/**
 * 类:新增窗口
 * @author Abe
 */
@SuppressWarnings("serial")
public class AddBookDialog extends JDialog { //用JDialog不用JFrame 可以设置Modal固定焦点在此窗口
	private JLabel[] hint = new JLabel[3];
	private static String[] str = {"编号","书名","日租金"};
	private JTextField newIsdn;
	private JTextField newName;
	private JSpinner newPrice;
	private JButton addButton;
	private JButton resetButton;
	private MyTable table;
	
	/**
	 * 构造器
	 * @param table
	 */
	public AddBookDialog(MyTable table){
		this.table = table;
		this.setModal(true);
		this.setSize(400,400);
		this.setResizable(false);
		this.setLocationRelativeTo(null);
		this.setLayout(null);
		this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
		
		inisComponents();
	}
	
	/**
	 * 方法:初始化构件 
	 */
	private void inisComponents() {
		for(int i = 0 ; i < hint.length ; i++){
			hint[i] = new JLabel(str[i]);
			hint[i].setBounds(50 , 100 + 60 * i , 80 , 50);
			this.add(hint[i]);
		}
		
		newIsdn = new JTextField();
		newIsdn.setBounds(130, 110, 200, 30);
		this.add(newIsdn);
		
		newName = new JTextField();
		newName.setBounds(130, 170, 200, 30);
		this.add(newName);
		
		SpinnerModel sModel = new SpinnerNumberModel(1.0, 0.1, 5.0, 0.1);
		newPrice = new JSpinner(sModel);
		newPrice.setBounds(130, 230, 200,30);
		this.add(newPrice);
		
		addButton = new JButton("新增");
		addButton.setBounds(100, 300, 70, 30);
		addButton.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				Object obj = e.getSource();
				if(obj == addButton){				//价格调整标签
					String isdn = newIsdn.getText();
					String name = newName.getText();
					String pricestr = String.format("%.1f", newPrice.getModel().getValue());
					double price =Double.parseDouble(pricestr);
					table.getBookManager().add(new Book(isdn,name,price));
					table.refreshTableModel();
					
					AddBookDialog.this.dispose();
				}
			}
		});
		this.add(addButton);
		
		resetButton = new JButton("重置");
		resetButton.setBounds(230, 300, 70, 30);
		resetButton.addActionListener(new ActionListener() {	//就地实例化 按键触发事件 重置
			@Override
			public void actionPerformed(ActionEvent e) {
				Object obj = e.getSource();
				if(obj == resetButton){
					for(Component c : getContentPane().getComponents()) { 	//最后放工具包
						com.lovo.MyUtil.resetComponent(c);					//这里调用了重置工具
					}
				}
			}
		});
		this.add(resetButton);
		
		//统一设置格式 容器内还有容器的,不会改变字体
		Font font = new Font("微软雅黑", Font.PLAIN, 14);
		for (Component c : this.getContentPane().getComponents()) {
			c.setFont(font);
		}
	}

	public static void main(String[] args)  throws Exception{
		UIManager.setInstalledLookAndFeels(UIManager.getInstalledLookAndFeels());
		new AddBookDialog(null).setVisible(true);
	}
}

3.WOOO 工具包

package com.lovo;

import java.awt.Component;

import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JPasswordField;
import javax.swing.JSpinner;
import javax.swing.JTextField;
/**
 * WOOO计划包
 * @author Abe
 */
public class MyUtil {
	private MyUtil(){
	}
	/**
	 * 方法:自动匹配类型初始化 输入框
	 * @param c
	 */
	public static void resetComponent (Component c){
		if(c instanceof JTextField){				//文字框
			((JTextField) c).setText("");
		}else if(c instanceof JPasswordField){		//密码框
			((JPasswordField) c).setText("");
		}else if(c instanceof JCheckBox){			//复选框
			((JCheckBox) c).setSelected(false);
		}else if(c instanceof JComboBox<?>){		//下拉框
			((JComboBox<?>) c).setSelectedIndex(0);
		}else if(c instanceof JSpinner){			//不知道什么框,有上下调整箭头的
			((JSpinner)c).setValue(0);
		}
	}
}


JAVA程序设计(14.3)----- 图书馆管理系统 初步设计 界面篇~借书目录查看窗口,新书添加窗口