1. 程式人生 > >Java基礎---圖形介面

Java基礎---圖形介面

java中元件類都位於: java.awt 和 javax.swing 
區別:
    1.二者存在相同圖形類,區別在於swing的圖形都以J開頭
    2.java.awt中的圖形類的圖形依賴系統(windows.linux)圖形庫
    3.javax.swing中的圖形類的圖形都是sun自己去實現的
所有的圖形類都稱作為元件:
    容器元件
    非容器元件
容器元件:

    一、窗體

public class JFrame1 {

	public static void main(String[] args) {
		// 建立一個窗體物件
		JFrame frame = new JFrame("第一個窗體");
		// 設定窗體的大小(象素為單位)
		// frame.setSize(300, 400);
		// 設定窗體左上角出現的位置,公式自己推導一下,哈哈,,只能適應固定螢幕解析度
		// frame.setBounds((1366-300)/2, (768-400)/2, 300, 400);
		// 獲取解析度設定位置,窗體大小
		initFrame(frame, 300, 400);
		// 設定窗體的可見性
		frame.setVisible(true);
		// 設定窗體的關閉事件
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

	}

	// 設定窗體出現在中間位置
	public static void initFrame(JFrame frame, int width, int height) {
		// 獲取預設系統工具包
		Toolkit toolkit = Toolkit.getDefaultToolkit();
		// 獲取螢幕的解析度。
		Dimension d = toolkit.getScreenSize();
		int x = (int) d.getWidth();
		int y = (int) d.getHeight();
		// 根據螢幕解析度設定位置
		frame.setBounds((x - width) / 2, (y - height) / 2, width, height);

	}

}

    二、對話方塊
        Dialog(對話方塊)
            Dialog(Dialog owner, String title, boolean modal) 
                   owner :  父級元件(窗體等)
                 title :  對話方塊的標題
                modal :  模式 
                              true: 對話方塊沒有關閉的時候,不準操作父級元件(窗體等)。   
                              false: 對話方塊即使沒有關閉,還是可以操作父級元件(窗體等)

        JOptionPane(對話方塊)
            //訊息、 警告、 錯誤
            showMessageDialog(Component parentComponent, Object message, String title, int messageType) 
            parentComponent:    父級元件(窗體等)
            message :           顯示的訊息
            title :            對話方塊的標題 
            messageType :       指定對話方塊的型別(訊息、 警告、 錯誤)

public class Dialog1 {
	public static void main(String[] args) {

		// 建立一個窗體
		JFrame frame = new JFrame("窗體");
		// 設定窗體
		FrameUtil.initFrame(frame, 500, 400);
		// frame.setBounds((1366-300)/2, (768-400)/2, 300, 400);
		// 建立一個對話方塊
		// 方式一:不好看
		/*
		 * Dialog dialog2=new Dialog(frame, "dd",false);
		 * 設定對話方塊位置屬性+尺寸
		 * dialog2.setBounds(580, 250, 200, 200);
		 * dialog2.setVisible(true);
		 */
		// 方式二:好看一點的
		JDialog dialog = new JDialog(frame, "對話方塊", false);
		// 設定對話方塊位置屬性+尺寸
		dialog.setBounds(580, 250, 200, 200);
		dialog.setVisible(true);
		// 訊息對話方塊
		JOptionPane.showMessageDialog(frame, "明天放假了!爽!!", "通知:", JOptionPane.INFORMATION_MESSAGE);
		// 警告對話方塊
		JOptionPane.showMessageDialog(frame, "別在嫌我醜了", "警告:", JOptionPane.WARNING_MESSAGE);
		// 錯誤對話方塊
		JOptionPane.showMessageDialog(frame, "別睡覺了..", "出局:", JOptionPane.ERROR_MESSAGE);
		// 確認對話方塊
		int select = JOptionPane.showConfirmDialog(frame, "軟體繼續安裝嗎?");
		System.out.println("num:" + select);
		// 輸入對話方塊
		String money = JOptionPane.showInputDialog(frame, "請輸入你要取的金額:");
		System.out.println("money:" + money);

	}
}

        FileDialog(檔案對話方塊)
             FileDialog(Dialog parent, String title, int mode) 
            parent :           父級元件(窗體等)
            title:             標題
            mode:              FileDialog.LOAD(載入)
                               FileDialog.SAVE(儲存) 

//檔案對話方塊
public class Dialog2 {

	public static void main(String[] args) {
		// 建立窗體
		JFrame frame = new JFrame("窗體");
		// 設定窗體
		FrameUtil.initFrame(frame, 500, 400);
		// 建立檔案對話方塊
		// FileDialog dialog = new FileDialog(frame, "開啟檔案", FileDialog.SAVE);
		FileDialog dialog = new FileDialog(frame, "開啟檔案", FileDialog.LOAD);
		// 設定顯示dialog
		dialog.setVisible(true);
		// 獲取檔案的路徑
		System.out.println("檔案的路徑:" + dialog.getDirectory());
		// getFile() 獲取檔名。
		System.out.println("檔名:" + dialog.getFile());
	}
}

    三、面板

public class Panel1 {
	public static void main(String[] args) {
		JFrame frame = new JFrame("窗體");
		// 面板
		JPanel panel = new JPanel();
		panel.setBackground(Color.BLUE);
		// 把面板新增到窗體上。
		frame.add(panel);
		FrameUtil.initFrame(frame, 500, 400);
	}
}
public class Panel2 {

	public static void main(String[] args) {
		JFrame frame = new JFrame("註冊");
		// 建立一個面板
		JPanel panel = new JPanel();
		// 建立一個標籤物件
		JLabel nameLabel = new JLabel("使用者名稱:");
		// 輸入框
		JTextField nameField = new JTextField(12);
		// 把元件新增面板
		panel.add(nameLabel);
		panel.add(nameField);

		// 密碼
		JLabel passLabel = new JLabel("密碼:");
		// 密碼框
		JPasswordField passField = new JPasswordField(12);
		panel.add(passLabel);
		panel.add(passField);

		// 性別: 單選框
		JLabel sexLabel = new JLabel("性別:");

		// 單選框 注意: 單選框一定要進行分組,在同一組的單選框中只能選擇其中的一個  true:預設值
		JRadioButton man = new JRadioButton("男", true);
		JRadioButton woman = new JRadioButton("女");
		// 分組
		ButtonGroup group = new ButtonGroup();
		group.add(man);
		group.add(woman);
		// 把元件新增面板
		panel.add(sexLabel);
		panel.add(man);
		panel.add(woman);

		// 城市 --- 下拉框
		JLabel cityLabel = new JLabel("來自城市");
		Object[] citys = { "北京", "上海", "廣州", "深圳" };
		JComboBox<Object> cityBox = new JComboBox<Object>(citys);
		panel.add(cityLabel);
		panel.add(cityBox);

		// 愛好---複選框
		JLabel hobitLabel = new JLabel("愛好");
		JCheckBox java = new JCheckBox("java");
		JCheckBox javascript = new JCheckBox("JS");
		JCheckBox write = new JCheckBox("敲java");

		panel.add(hobitLabel);
		panel.add(java);
		panel.add(javascript);
		panel.add(write);

		// 自我簡介
		JLabel introLabel = new JLabel("自我簡介:");
		JTextArea area = new JTextArea(15, 15);
		panel.add(introLabel);
		panel.add(area);

		frame.add(panel);
		FrameUtil.initFrame(frame, 830, 500);

	}
}


非容器元件
        一、選單元件: 
               選單條(JMenuBar)  選單(JMenu)   選單項(JMenuItem)
            關係: 選單條新增選單 , 選單新增選單項
            複選選單: 選單新增選單,  然後選單再新增選單項。

public class Menu1 {

	// 窗體
	JFrame frame = new JFrame("記事本");

	// 選單條
	JMenuBar bar = new JMenuBar();

	// 選單
	JMenu fileMenu = new JMenu("檔案");
	JMenu editMenu = new JMenu("編輯");
	JMenu helpMenu = new JMenu("幫助");

	// 選單項
	JMenuItem open = new JMenuItem("開啟");
	JMenuItem save = new JMenuItem("儲存");
	JMenuItem copy = new JMenuItem("拷貝");

	JMenuItem about = new JMenuItem("關於");
	JMenuItem version = new JMenuItem("升級");

	// 文字域
	JTextArea area = new JTextArea(20, 20);

	public void init() {
		// 把選單新增到選單條上
		bar.add(fileMenu);
		bar.add(editMenu);
		// 把選單項新增到選單
		fileMenu.add(open);
		fileMenu.add(save);
		editMenu.add(copy);

		// 複選選單, 選單新增到選單上。
		editMenu.add(helpMenu);
		// 選單新增選單項
		helpMenu.add(about);
		helpMenu.add(version);

		// 把選單條新增到窗體上
		frame.add(bar, BorderLayout.NORTH);
		frame.add(area);
		//設定窗體
		FrameUtil.initFrame(frame, 500, 600);
	}

	public static void main(String[] args) {
		new Menu1().init();

	}

}

佈局管理器 : 

作用就:擺放元件。不同佈局管理器有不同風格

    1.BorderLaytout(邊框佈局管理器): 
        borderLayout 注意:
            1. 容器使用了BorderLayout佈局管理器,容器中元件沒有指定具體的方位,預設在中間。
            2. Frame預設使用BorderLayout佈局管理器.
            3. 中間的元件都會佔據其東南西北那個元件空缺位置。

public class BorderLayout1 {

	public static void main(String[] args) {
		// 建立一個窗體
		JFrame frame = new JFrame("邊框佈局管理器");
		// 建立邊框佈局管理器
		BorderLayout borderLayout = new BorderLayout();
		// 讓窗體使用邊框佈局管理器
		frame.setLayout(borderLayout);
		// 位置擺放
		frame.add(new JButton("北"), BorderLayout.NORTH);
		frame.add(new JButton("南"), BorderLayout.SOUTH);
		frame.add(new JButton("西"), BorderLayout.WEST);
		frame.add(new JButton("東"), BorderLayout.EAST);
		frame.add(new JButton("中"), BorderLayout.CENTER);

		// 初始化窗體
		FrameUtil.initFrame(frame, 300, 300);
	}

}

    2.FlowLayout 流式佈局管理器

        FlowLayout注意:
        1. 使用FlowLayout的時候預設是居中對齊的。
        2. panel預設使用的佈局管理器就是FlowLayout.

public class FlowLayout1 {

	public static void main(String[] args) {
		JFrame frame = new JFrame("窗體");
		// 面板
		JPanel panel = new JPanel();
		// 建立一個流式佈局管理器
		panel.setBackground(Color.BLUE);
		// 預設居中對其
		// FlowLayout flowLayout = new FlowLayout();
		FlowLayout flowLayout = new FlowLayout(FlowLayout.LEFT, 10, 0);
		// 讓面板使用流式佈局管理器
		panel.setLayout(flowLayout);
		frame.add(panel);

		panel.add(new JButton("one"));
		panel.add(new JButton("two"));
		panel.add(new JButton("three"));
		panel.add(new JButton("four"));

		FrameUtil.initFrame(frame, 300, 300);

	}

}


    3.GridLayout  表格佈局管理器
        如果新增的元件超過了表格的個數,那麼會新增多一列處理 

public class GridLayout1 {

	public static void main(String[] args) {
		// 建立一個窗體
		JFrame frame = new JFrame("計算器");
		// 建立一個表格佈局管理器
		GridLayout gridLayout = new GridLayout(4, 4);
		frame.setLayout(gridLayout);

		for (int i = 0; i < 10; i++) {
			frame.add(new JButton(i + ""));
		}

		frame.add(new JButton("+"));
		frame.add(new JButton("-"));
		frame.add(new JButton("*"));
		frame.add(new JButton("/"));
		frame.add(new JButton("="));
		frame.add(new JButton("."));

		FrameUtil.initFrame(frame, 250, 300);

	}

}

事件:元件發生了指定的動作時,會有相應的處理方案。
事件組成: 事件源、監聽器、事件、處理方式 
動作監聽器:動作監聽器針對 滑鼠點選 和 空格按鍵

public class Listener1 {

	public static void main(String[] args) {
		// 建立窗體
		JFrame frame = new JFrame("窗體");
		// 建立一個按鈕
		JButton button = new JButton("點我啊");
		// 個按鈕新增一個監聽器
		button.addActionListener(new ActionListener() {
			// 如果發生滑鼠點選、按下空格鍵就會呼叫actionPerformed方法
			@Override
			public void actionPerformed(ActionEvent e) {
				// 獲取事件源物件
				JButton button = (JButton) e.getSource();
				String content = button.getText();
				if ("點我啊".equals(content)) {
					button.setText("點他吧!");
				} else {
					button.setText("點我啊");
				}
			}
		});
		frame.add(button);
		FrameUtil.initFrame(frame, 200, 200);

	}

}

滑鼠監聽器

public class Listener2 {

	public static void main(String[] args) {
		JFrame frame = new JFrame("窗體");
		// 建立一個按鈕
		JButton button = new JButton("點我啊");
		// 給按鈕新增一個滑鼠監聽器
		/*
		 * button.addMouseListener(new MouseListener() {
		 * 
		 * @Override public void mouseReleased(MouseEvent e) {
		 * System.out.println("滑鼠鬆開.."); }
		 * 
		 * @Override public void mousePressed(MouseEvent e) {
		 * System.out.println("滑鼠按下..."); }
		 * 
		 * @Override public void mouseExited(MouseEvent e) {
		 * System.out.println("滑鼠離開..."); }
		 * 
		 * @Override public void mouseEntered(MouseEvent e) {
		 * System.out.println("滑鼠進入...."); }
		 * 
		 * @Override public void mouseClicked(MouseEvent e) {
		 * System.out.println("滑鼠單擊...."); } });
		 * 
		 */
		// MouseAdapter介面卡 ---- 該類已經實現了MouseListener介面,但是實現的方法全部都是空實現。
		button.addMouseListener(new MouseAdapter() {

			@Override
			public void mouseClicked(MouseEvent e) {
				if (e.getClickCount() == 2) {
					System.out.println("雙擊了...");
				}
			}
		});

		frame.add(button);
		FrameUtil.initFrame(frame, 200, 200);

	}

}

鍵盤監聽器

public class Listener3 {

	public static void main(String[] args) {
		JFrame frame = new JFrame("窗體");
		// 建立一個按鈕
		JButton button = new JButton("點我啊");
		// 給按鈕新增一個鍵盤監聽器
		/*
		 * button.addKeyListener(new KeyListener() {
		 * 
		 * @Override public void keyTyped(KeyEvent e) {
		 * System.out.println(" 鍵入某個鍵..."); }
		 * 
		 * @Override public void keyReleased(KeyEvent e) {
		 * System.out.println("釋放鍵 ..."); }
		 * 
		 * @Override public void keyPressed(KeyEvent e) {
		 * System.out.println("按下某個鍵..."); } });
		 */

		button.addKeyListener(new KeyAdapter() {

			@Override
			public void keyPressed(KeyEvent e) {
				System.out.println("按下鍵的字元:" + e.getKeyChar() + " 鍵的code:" + e.getKeyCode());
			}
		});

		frame.add(button);
		FrameUtil.initFrame(frame, 200, 200);
	}

}