1. 程式人生 > >初涉java(swing常用元件及繪圖原理)

初涉java(swing常用元件及繪圖原理)

swing

Swing是一個用於開發Java應用程式使用者介面的開發工具包。需引入包import javax.swing.*;

頂層容器

圖形介面至少要有一個頂級Swing容器,頂級Swing容器為其它Swing元件在螢幕上的繪製和處理事件提供支援
常用的頂級容器:
JFrame(框架):表示主程式視窗
JDialog(對話方塊):每個JDialog物件表示一個對話方塊,對話方塊屬於二級視窗
JApplet(小程式):在瀏覽器內顯示一個小程式介面

一個框架包括邊界、選單欄、工具欄、狀態列,以及中間佔主要部分的窗格,窗格也可以看作是一種面板,但它是框架的一個組成部分,元件不會直接放到框架上,而是放在若干個面板上,這些面板再放到窗格上用框架物件的getContentPane()函式來獲得窗格,再呼叫窗格的add()函式放置面板

常用的幾種元件

1.標籤 (JLabel)
可在標籤上顯示文字、圖象或是文字圖象的組合。

     //顯示文字
     JLabel labText=new JLabel(“文字標籤”);
     labText.setText("文字標籤");
     //顯示圖片
     ImageIcon icon = new ImageIcon("image/greenflag20.gif");
     JLabel labImage=new JLabel(icon);
     labImage.setIcon(icon);

2.密碼框 (JPasswordField)
使用者可以向其中輸入文字並加以編輯,和文字框不同的是,向密碼框中輸入文字時,顯示的不是實際輸入的文字,而是特殊的回顯字元(通常是’*’)。

 JPasswordField txtPwd=new JPasswrodField(20);//建立一個密碼框
  txtPwd.setEchoChar('#');// 設定該密碼框的回顯字元為'#'
  char []pwd=txtPwd.getPassword();//取得密碼框中的內容

3.選單
選單採用的是一種層次結構,最頂層是選單欄(JMenuBar);在選單欄中可以新增若干個選單(JMenu),每個選單中又可以新增若干個選單選項(JMenuItem)、分隔線(Separator)或是選單(稱之為子選單)。

  JMemuBar menuBar=new JMenuBar();//建立一個選單欄
//通常使用框架的setJMenuBar(JMenuBar aMenuBar)方法將選單欄置於框架中 JMenu menuSysConfig=new JMenu("系統設定(X)");//又根據需要建立多個選單 menuBar.add(menuSysConfig);//並加入選單欄中

4.按鈕(JButton)

 button.setPreferredSize(new Dimension(30,30));//設定按鈕的大小
 button.setContentAreaFilled(false);//將按鈕設定為透明的
 // 例項化一個圖示物件
      ImageIcon image = new ImageIcon(icons[i]);
 // 例項化按鈕物件,並且設定按鈕上顯示圖片
      JButton button = new JButton(image);
   //或者
      button.setIcon(new ImageIcon(getClass().getResource("qq.png")));
JCheckBox jcb1 = new JCheckBox("主站");// 定義一個複選框
JCheckBox jcb2 = new JCheckBox("論壇");// 定義一個複選框
JCheckBox jcb3 = new JCheckBox("部落格");// 定義一個複選框
JPanel panel = new JPanel();// 定義一個面板
 panel.add(this.jcb1);// 加入元件
 panel.add(this.jcb2);// 加入元件
 panel.add(this.jcb3);// 加入元件

例子

下面貼一段程式碼來表述一個視窗及其按鈕,輸入框,佈局等的實現方法,此處不再贅述

package test1;
import java.awt.*;
import javax.swing.*;
public class QqLogin extends JFrame{

    //北部區域
    JLabel jl1;//圖片
    //南部區域
    JPanel jp1;
    JButton jb1,jb2,jb3;
    //中部區域
    JTabbedPane jtp;//選項卡窗格
    JPanel jp2,jp3,jp4;

    JLabel jl2,jl3,jl4,jl5;
    JTextField jtf;//賬號框
    JPasswordField jpf;//密碼框
    JButton jb4;//清除按鈕
    JCheckBox jcb1,jcb2;//隱身和記住密碼

    public QqLogin()
    {
        //建立元件
        jl2=new JLabel("QQ號碼",JLabel.CENTER);
        jl3=new JLabel("QQ密碼",JLabel.CENTER);
        jl4=new JLabel("忘記密碼",JLabel.CENTER);
        jl4.setFont(new Font("宋體",Font.PLAIN,16));//設定字型樣式
        jl4.setForeground(Color.BLUE);//設定字型顏色
        jl5=new JLabel("<html><a herf='www.qq.com'>申請密碼保護,</a>");
        jl5.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));

        jtf=new JTextField();
        jpf=new JPasswordField();
        jb4=new JButton("清除號碼");

        jcb1=new JCheckBox("隱身登入");
        jcb2=new JCheckBox("記住密碼");

        jl1=new JLabel(new ImageIcon("1.gif"));//圖片由自己將對應名字的圖片貼上在同一包下,為了好看我截圖的QQ登入介面的圖片
        //jl1=new JLabel("你們好");

        jp1=new JPanel();
        jb1=new JButton("登入");
        jb2=new JButton("取消");
        jb3=new JButton("嚮導");

        jtp=new JTabbedPane();
        jp2=new JPanel();
        jp3=new JPanel();
        jp3.setBackground(Color.RED);
        jp4=new JPanel();
        jp4.setBackground(new Color(0,0,255));

        //將面板新增到選項窗格上
        jtp.add("QQ號碼", jp2);
        jtp.add("手機號碼",jp3);
        jtp.add("電子郵箱",jp4);

        //設定佈局
        jp2.setLayout(new GridLayout(3,3));

        //新增元件
        jp1.add(jb1);
        jp1.add(jb2);
        jp1.add(jb3);

        jp2.add(jl2);
        jp2.add(jtf);
        jp2.add(jb4);
        jp2.add(jl3);
        jp2.add(jpf);
        jp2.add(jl4);
        jp2.add(jcb1);
        jp2.add(jcb2);
        jp2.add(jl5);

        this.add(jp1,BorderLayout.SOUTH);
        this.add(jl1,BorderLayout.NORTH);
        this.add(jtp,BorderLayout.CENTER);

        //展現元件
        //ImageIcon icon=new ImageIcon("qq.gif");
        //this.setIconImage(icon.getImage());給窗體設定圖示方法
        this.setSize(480,400);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);

    }


    public static void main(String[] args) {
        // TODO Auto-generated method stub

        new QqLogin();
    }

}

執行結果圖:
這裡寫圖片描述

JPanel

JPanel是Java圖形使用者介面(GUI)工具包swing中的面板容器類,包含在javax.swing 包中,是一種輕量級容器,可以加入到JFrame窗體中。

首先可以定義一個MyPanel(我自己的面板)用於繪圖和現實繪圖的區域,根據需要重寫覆蓋該類中的方法,


//java繪圖原理
package com.test1;
import javax.swing.*;
import java.awt.*;
public class Tanke_1 extends JFrame{

    MPanel mp=null;
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Tanke_1 tanke=new Tanke_1(); 
    }

    public Tanke_1()
    {
        mp=new MPanel();
        this.add(mp);//將畫板元件新增到JFrame容器中

        this.setTitle("畫板");//給視窗設定標題
        this.setSize(400,300);  //設定大小 按畫素
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    //設定當關閉視窗的時候保證jvm也退出
        this.setVisible(true);//顯示
    }

}

//定義一個MyPanel(我自己的面板)用於繪圖和現實繪圖的區域
class MPanel extends JPanel
{
    //覆蓋JPanel的 paint方法
    //Graphics是繪圖的重要類,可以理解為一隻畫筆
    public void paint(Graphics g)
    {
        //1.呼叫父類函式完成初始化
        super.paint(g);//這句話一定不能少
        //先畫一個圓圈
//      g.drawOval(10,10,30,30);
//      g.drawLine(10, 10, 40, 40);//直線
//      g.drawRect(10, 10, 40, 60);//矩形邊框,最左上角的點座標和矩形長寬
//      g.setColor(Color.blue);//設定顏色
//      g.fillRect(10, 10, 40, 60);//填充矩形
//      橢圓的x,y是對應矩形的最左上角的點的座標

        //在面板上畫出圖片
//      Image im=Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/1.jpg"));//把圖片的資訊加載出來
//      顯示圖片
//      g.drawImage(im, 90, 90, 540,187,this);
        //如何畫出字
        g.setColor(Color.red);//顏色
        g.setFont(new Font("宋體",Font.BOLD,50));
        g.drawString("祖國萬歲", 100, 100);
    }


}