1. 程式人生 > >高仿QQUI介面

高仿QQUI介面

JAVA 程式設計是一個面向物件的過程,要製作簡單的UI介面,首先要了解類與物件的概念,以及啥是面向物件,面向過程。

1.什麼是類、物件

 在生活中,要具體說什麼是類,可能很多人都說不出來。一提到類,大多數人想到的都是人類呀,動物類呀以及植物類等等比較抽象的事物。那要如何區分動物類,植物類,人類呢?要區分具體的類要根據類的具體特徵。看是不是符合某個類的特徵。在JAVA中也是一樣,JAVA中,類是指一些擁有共同屬性特徵的物件的集合。在安裝玩jdk後會有一些內建的類不需要我們定義,可以通過引用對應的包使用對應的類物件。那什麼是物件呢?物件指的是一些具體的物體,比如周杰倫呀,這個杯子,讓人能夠清楚知道的具體物體。在java中要使用某個類的方法、屬性必須建立相應的類物件。

2.什麼是面向物件、面向過程

從字面理解,面向就是面對,關注的意思,那麼面向物件就是面對物件、關注物件,關注的重點在物件上,那麼面向過程就是關注的重點在過程上。

3.在設計UI介面時,要了解一些必要的元件的應用,以及簡單的佈局

元件:按鈕(JButton)標籤(JLabel)文字框(JTexField)等等

佈局:流動佈局(FlowLayout)元件從左至右,從上至下排列,當行滿了自動到下一行

          邊框佈局(BorderLayout)窗體分為東南西北中五個部分,佈局時指定相應的位置,預設為中。

          絕對佈局(null)通過指定固定的座標位置實現元件排列。

等等

在設定好簡單的UI介面後,點選按鈕會沒有反應,那是因為沒有新增監聽器。那什麼是監聽器呢?

4.什麼是監聽器?

java語言中的監聽器相當於現實生活中農的監視器,適用於監視視窗中各元件的活動(比如按鈕的點選、雙擊,視窗的拖動等等,),以便做出各種反應。

監聽器:監視器(監視一些事物的動作)

作用:用於監聽窗體上一些元件的動作

使用方式:把一些邏輯(窗體關閉、窗體最小化、窗體移動、按鈕點選等動作)通過事件的觸發來執行

5.有哪些監聽器?

Java當中,監聽器有哪些?監聽器的類如下:

從屬包:java.awt.event包下

監聽器:滑鼠監聽器:MouseListener    MouseMotionListener  

主要監聽器的是滑鼠的相關動作(按下、釋放、點選、移動、拖動等等)

窗體拖動上、窗體關閉、最小化等等

事件監聽器:ActionListener(監聽事件有沒有觸發),用於按鈕的事件監聽。

鍵盤監聽器KeyListener

用於接收鍵盤事件(擊鍵)。


6.簡單的UI介面

LoginFrame.java

//引用包
import javax.swing.JFrame;
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.ImageIcon;
import javax.swing.JTextField; 
import javax.swing.JCheckBox; 
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JOptionPane;
import java.awt.Point;

public class LoginFrame{
	public static int x=0,y=0;
   public static void main(String[] args){
     //1.建立窗體物件JFrame
     JFrame jf =new JFrame();

     //設定窗體大小
     jf.setSize(428,400);

     //設定窗體位置
     jf.setLocationRelativeTo(null);

     //設定窗體預設關閉操作
     jf.setDefaultCloseOperation(3);

     //去除當前窗體的預設標題欄
     jf.setUndecorated(true);

     //設定窗體的佈局,為邊框佈局
     BorderLayout bl= new BorderLayout();
     jf.setLayout(bl);
     
     //往窗體上新增一個面板
     JPanel panel = new JPanel();
     panel.setBackground(java.awt.Color.white);
     jf.add(panel,BorderLayout.CENTER);

     //設定panel的絕對佈局
     panel.setLayout(null);

     //在窗體上放置一個大圖片
     ImageIcon image1 = new ImageIcon("image/GIF.gif");
     JLabel label = new JLabel(image1);
     jf.add(label,BorderLayout.NORTH);

     //在窗體底部新增各種元件
     ImageIcon imageHead = new ImageIcon("image/head_log.jpg");
     JLabel labelHead = new JLabel(imageHead);

     //設定圖片的位置
     labelHead.setBounds(50,30,80,80);
     panel.add(labelHead);
 
     //在下面的面板新增輸入框
     JTextField jtf1 = new JTextField();
     JTextField jtf2 = new JTextField();
     jtf1.setBounds(170,30,180,24);
     jtf2.setBounds(170,54,180,24);
     panel.add(jtf1);
     panel.add(jtf2);

     //新增複選框
     JCheckBox box1 = new JCheckBox("記住密碼");
     JCheckBox box2 = new JCheckBox("自動登入");
     box1.setBounds(170,80,80,23);
     box2.setBounds(260,80,80,23);
     panel.add(box1);
     panel.add(box2);

     //新增按鈕
     JButton button1 = new JButton("登入");
	 button1.setBackground(java.awt.Color.blue);
	 button1.setForeground(java.awt.Color.white);
     button1.setBorderPainted(false);
     button1.setBounds(170,110,180,25);
	 panel.add(button1);
	 //新增label
	 JLabel label1 = new JLabel("註冊賬號");
	 JLabel label2= new JLabel("找回密碼");
	 label1.setForeground(java.awt.Color.blue);
	 label2.setForeground(java.awt.Color.blue);
     label1.setBounds(350,30,100,25);
     label2.setBounds(350,54,100,25);
     panel.add(label1);
     panel.add(label2);


     //設定窗體可見
     jf.setVisible(true);
	 
	 //新增事件監聽
	 MouseListener mouse = new MouseListener(){
		 public void mouseClicked(MouseEvent e){
			 //實現窗體的點選動作(窗體關閉、最小化)
			 //確認當前點選的位置(x,y)
			 int x=e.getX();
			 int y=e.getY();
			 if(x>400&&y<20){
				 //關閉窗體
				 System.exit(0);
			 }else if(x>370&&x<400&&y<20){
				 //設定窗體最小化到工作列
				 jf.setExtendedState(1);
			 }else if(x>340&&x<370&&y<20){
 new HttpFrame();
 //隱蔽登入窗體
 jf.dispose();
 }
		 }
		 public void mouseEntered(MouseEvent e){}
		 public void mouseExited(MouseEvent e){}
		 public void mousePressed(MouseEvent e){
			 x = e.getX();
			 y = e.getY();
		 }
		 public void mouseReleased(MouseEvent e){}
	 };
	 
	 MouseMotionListener mouseMotion = new MouseMotionListener(){
		 public void mouseDragged(MouseEvent e){
			 int mouse_x = e.getX();
			 int mouse_y = e.getY();
			 //獲取當前窗體的當前位置,jf來獲取,得到一個點物件
			 Point point = jf.getLocation();
			 //獲取當前點的x和y屬性值
			 int frame_x = (int)point.getX();
			 int frame_y = (int)point.getY();
			 jf.setLocation(frame_x+mouse_x-x,frame_y+mouse_y-y);
		 }
		 public void mouseMoved(MouseEvent e){}
	 };
	 ActionListener action = new ActionListener(){
		 public void actionPerformed(ActionEvent e){
			 //獲取文字框的內容
			 String name = jtf1.getText();
			 String pwd = jtf2.getText();
			 if(name.equals("admin")&&pwd.equals("admin")){
				 //建立窗體物件JFrame
				 JFrame chatFrame = new JFrame();
				 chatFrame.setSize(500,500);
				 chatFrame.setDefaultCloseOperation(3);
				 chatFrame.setVisible(true);
				 //隱蔽登入窗體
				 jf.dispose();
			 }else{
				 //彈出提示框
				 JOptionPane.showMessageDialog(null,"登入失敗");
			 }
		 }
	 };
	 
	 label.addMouseListener(mouse);
	 label.addMouseMotionListener(mouseMotion);
	 button1.addActionListener(action);
     
   }
}

HttpFrame.java設定為流體佈局,顯示較為雜亂

import javax.swing.*;
import java.awt.*;


public class HttpFrame{

    HttpFrame(){
  
     //1.建立窗體物件JFrame
     JFrame jf =new JFrame();
	 
	 //構建需要的元件
	 JComboBox jcb1,jcb2,jcb3;
	 //初始化
	 jcb1 = new JComboBox(); 
	 jcb1.addItem("不使用代理");
	 jcb1.addItem("Http代理");
	 jcb1.addItem("socks5代理");
	 jcb1.addItem("使用瀏覽器設定");
	 jcb2 = new JComboBox();
	 jcb2.addItem("不使用高階設定");
	 jcb2.addItem("UDP型別");
	 jcb2.addItem("TCP型別");
	 jcb3 = new JComboBox();
	 
	 //新增元件
	 jf.setLayout(new FlowLayout());
	 jf.add(new JLabel("網路設定"));
	 jf.add(new JLabel("型別:"));
	 jf.add(jcb1);
	 jf.add(new JLabel("地址:"));
	 jf.add(new JTextField(8));
	 jf.add(new JLabel("埠:"));
	 jf.add(new JTextField(4));
	 jf.add(new JLabel("使用者名稱:"));
	 jf.add(new JTextField(10));
	 jf.add(new JLabel("密碼:"));
	 jf.add(new JTextField(8));
	 jf.add(new JLabel("域:"));
	 jf.add(new JTextField(4));
	 jf.add(new JButton("測試"));
	 jf.add(new JLabel("登入伺服器"));
	 jf.add(new JLabel("型別:"));
	 jf.add(jcb2);
	 jf.add(new JLabel("地址:"));
	 jf.add(jcb3);
	 jf.add(new JLabel("埠:"));
	 jf.add(new JTextField(4));
	 jf.add(new JButton("確定"));
	 jf.add(new JButton("取消"));
     //設定窗體大小
     jf.setSize(428,400);
	 jf.setResizable(false);

     //設定窗體位置
     jf.setLocationRelativeTo(null);

     //設定窗體預設關閉操作
     jf.setDefaultCloseOperation(3);
	 jf.setVisible(true);

    }

}