GridBagLayoutFrameDemo--搖號

參考文檔:

swing佈局詳解(附示例圖)

效果如下:



代碼如下:


/**
 * 功能:
 * 1.可以從文件讀取人員賬號信息
 * 2.新增人員可以追加到文件中
 * 3.可以刪除人員,並在文件中也刪除
 * 4.搖號,隨機
 */

package com.test1;

import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.Random;

import javax.swing.BorderFactory;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;

public class GridBagLayoutFrame extends JFrame {
	private static final long serialVersionUID = 6819222900970457455L;
	// 定義需要的組件
	private JPanel mainPanel;
	private JButton addButton;
	private JButton leftButton;
	private JButton rightButton;
	private JLabel label;
	private JTextField field;
	private DefaultListModel leftModel;
	private DefaultListModel rightModel;
	private JList leftList;
	private JList rightList;
	BufferedReader br = null;
	BufferedWriter bw = null;
	FileReader fr = null;
	FileWriter fw = null;
	JScrollPane jsp ;
	// 臨時存放變量的數組列表
	ArrayList dd;
	
	public static void main(String[] args) {
		// 爲事件派發線程增加一個任務:
        // 創建並顯示這個應用程序的GUI(圖像用戶界面)
        // 在事件派發線程中所有掛起的事件都被處理後纔會調用如下方法,
        // 常用於更新界面。
		javax.swing.SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				createAndShowGUI();
			}
		});
	}
	
	 /**
     * 創建GUI並顯示。爲了線程安全,這個方法應該
     * 在事件派發線程中調用。
     * */
	private static void createAndShowGUI() {
		new GridBagLayoutFrame("搖號by毛二");
	}

	//構造函數
	public GridBagLayoutFrame(String title) {
		// 創建組件
		mainPanel = new JPanel();
		addButton = new JButton();
		leftButton = new JButton();
		rightButton = new JButton();
		label = new JLabel();
		field = new JTextField();
		leftModel = new DefaultListModel();
		rightModel = new DefaultListModel();
		leftList = new JList(leftModel);
		rightList = new JList(rightModel);
		dd = new ArrayList();
		
		initComponent();
		addData();
		
		//設置窗體屬性
		setTitle(title);
		setPreferredSize(new Dimension(600, 300));
		setLocation(400,100);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		// 顯示窗口
		pack();
		setVisible(true);
	}

	private void initComponent() {
		readFile(new File("D:\\搖號.txt"));
		label.setText("添加人員:");
		addButton.setText("添加");
		
//		 leftList.setPreferredSize(new Dimension(150, 250));
		// 從ArrayList中把數據顯示到左邊文本區
		int i = 0;
		while (i >= 0 && i < dd.size()) {
			((DefaultListModel) leftList.getModel()).addElement(dd.get(i));
			i++;
		}
		jsp = new JScrollPane(leftList);
		// 設置你希望顯示多少的選項
		leftList.setVisibleRowCount(5);
		rightList.setPreferredSize(leftList.getSize());
		leftButton.setText("刪除");
		rightButton.setText("開始搖號啦");
		mainPanel.setBorder(BorderFactory.createTitledBorder("搖號選擇框"));
		mainPanel.setLayout(new GridBagLayout());

		GridBagConstraints c = new GridBagConstraints();

		c.gridx = 0; // 0行0列
		c.gridy = 0;
		c.gridwidth = 1;
		c.gridheight = 1;
		c.fill = GridBagConstraints.HORIZONTAL;
		c.weightx = 0;
		c.weighty = 0;
		mainPanel.add(label, c);

		c.gridx++;
		c.weightx = 1;
		mainPanel.add(field, c);

		c.gridx++;
		c.weightx = 0;
		c.gridwidth = 1;
		c.gridheight = 1;
		// c.fill = GridBagConstraints.HORIZONTAL;
		mainPanel.add(addButton, c);

		c.gridx = 0;
		c.gridy = 1;
		c.weightx = 1;
		c.weighty = 1;
		c.gridwidth = 2;
		c.gridheight = 2;
		c.fill = GridBagConstraints.BOTH;
		mainPanel.add(jsp, c);

		c.gridx = 2;
		c.gridy = 1;
		c.gridwidth = 1;
		c.gridheight = 1;
		c.weightx = 0;
		c.weighty = 0.5;
		c.anchor = GridBagConstraints.SOUTH;
		c.fill = GridBagConstraints.HORIZONTAL;
		mainPanel.add(leftButton, c);

		c.gridx = 2;
		c.gridy = 2;
		c.anchor = GridBagConstraints.NORTH;
		c.fill = GridBagConstraints.HORIZONTAL;
		mainPanel.add(rightButton, c);
		c.gridx = 3;
		c.gridy = 1;
		c.gridwidth = 1;
		c.gridheight = 2;
		c.weightx = 1;
		c.weighty = 1;
		c.fill = GridBagConstraints.BOTH;
		mainPanel.add(rightList, c);

		this.getContentPane().add(mainPanel);
	}

	private void addData() {
		addButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				addItem();
			}
		});

		leftButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				removeItem();
			}
		});

		rightButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				rockItem();
			}
		});
	}

	private void addItem() {

		if (field.getText() != null && !field.getText().equals("")) {
			((DefaultListModel) leftList.getModel())
					.addElement(field.getText());
			dd.add(field.getText());
			writeFile(dd);
			field.setText("");
		}
	}

	private void removeItem() {
		int v = leftList.getSelectedIndex();
		if (v != -1) {
			// 從左邊列表中刪除選中的人員
			Object o = leftList.getSelectedValue();
			((DefaultListModel) leftList.getModel()).remove(leftList
					.getSelectedIndex());

			// 從ArrayList中刪除選中的人員。從而修改文件
			dd.remove(v);
			writeFile(dd);
		}
	}

	private void rockItem() {
		// 先清空右邊顯示的上一次搖號的數據
		for (int j = 0; j < ((DefaultListModel) rightList.getModel()).getSize(); j++) {
			((DefaultListModel) rightList.getModel()).removeAllElements();
		}

		// 準備隨機選擇搖號
		Random rand = new Random();
		int i = rand.nextInt(dd.size());
		leftList.setSelectedIndex(i);

		if (leftList.getSelectedIndex() != -1) {
			Object o = leftList.getSelectedValue();

			((DefaultListModel) rightList.getModel()).addElement(o);
		}
	}

	public void readFile(File f) {
		// 初始化,從文檔中把數據讀出到ArrayList中
		try {
			// 先創建一個FileReader對象,然後升級成BufferedReader對象
			fr = new FileReader(f);
			br = new BufferedReader(fr);

			/*
			 * Reader r = new InputStreamReader(new FileInputStream(f),"GBK");//防止亂碼
			 * br = new BufferedReader(r);
			 */
			// 循環讀取
			String s = "";
			while ((s = br.readLine()) != null && !"".equals(s)) {
				dd.add(s);
			}
		} catch (Exception e) {
			// TODO: handle exception
		} finally {
			try {
				br.close();
				fr.close();
			} catch (Exception e2) {
				// TODO: handle exception
			}
		}

	}

	public void writeFile(ArrayList a) {
		try {
			File f = new File("D:\\搖號.txt");
			//如果文件不存在,先創建
			if(!f.exists()){
				f.createNewFile();
			}
			fw = new FileWriter(f);
			bw = new BufferedWriter(fw);
			int i = 0;
			while (i >= 0 && i < a.size()) {
				if (i < (a.size() - 1)) {
					bw.write(dd.get(i).toString() + "\r\n");
				} else {
					bw.write(dd.get(i).toString());
				}
				i++;
			}
		} catch (Exception e) {
			// TODO: handle exception
		} finally {
			try {
				// 後開的先關閉流
				bw.close();
				fw.close();
			} catch (Exception e) {
				// TODO: handle exception
			}
		}
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章