1. 程式人生 > >JAVA圖形介面設計

JAVA圖形介面設計

圖形介面設計

1 Java Swing 概述

圖形化介面(Graphics User Interface,GUI)是指採用圖形方式顯示的計算機操作使用者介面。

通過圖形化介面,使用者和程式之間可以方便地進行互動。Java的抽象視窗工具包(Abstract Window Toolkit,AWT)提供許多用來設計GUI的元件類。

java.awtjavax.swing 包中一部分類的層次關係UML類圖。

UML圖

GUI元件按其作用可分為基本元件(Component)和容器兩大類:GUI基本元件,其上不能容納其他元件,如按鈕、文字框等圖形介面元素。容器是一種特殊的元件,可以用來容納其他的元件,如視窗、對話方塊等。

如果我們要在一個視窗中顯示按鈕、文字框等,需要將這些元件放到一個容器中。在java.awt中主要有兩個容器類Window類、Panel類和Applet類。但是Panel類必須放到Frame頂級容器中,一般不獨立使用。同樣我們也可以把Panel類和它的子類理解為一種中間容器,元件可以放到這個中間容器中,也可以放到頂級容器中。

容器和元件的概念與Android中的UI元件非常相似,View元件一定要依附在ViewGroup這個容器之下,此外,因為ViewGroup繼承自View,ViewGroup也可以當做View元件使用。

這裡寫圖片描述
        android的圖形使用者介面元件層次

2 視窗

一個基於GUI的應用程式應當提供一個能直接和作業系統直接互動的容器,該容器可以被直接顯示、繪製在作業系統所控制的平臺上,如顯示器上,這樣的容器被稱作GUI設計中的底層容器。
JFrame類的例項就是一個底層容器,即通常稱的視窗。其他容器必須被新增到底層容器中,以便藉助這個底層容器和作業系統進行資訊互動。

2.1 JFrame常用方法

JFrame() 建立一個無標題的視窗

JFrame(String s) 建立標題為s的視窗

public void setVisible(boolean b) 設定視窗是否可見,視窗預設不可見

public void dispose() 撤銷當前的視窗,並釋放當前視窗所使用的資源

public
void setDefaultCloseOperation(int operation) 設定單擊窗體右上角關閉圖示後,程式會做出怎樣的處理 WindowConstants.DISPOSE_ON_CLOSE 隱藏當前的視窗,並釋放窗體佔有的其他資源 WindowConstants.DO_NOTHING_ON_CLOSE 什麼也不做 WindowConstants.HIDE_ON_CLOSE 隱藏當前視窗 WindowConstants.EXIT_ON_CLOSE 結束視窗所在的應用程式
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

示例-JFrame建立兩個視窗

用JFrame建立兩個視窗
結果:
這裡寫圖片描述

import javax.swing.JFrame;
import javax.swing.WindowConstants;

public classWindows {
    public static void main(String[] args) {
        JFrame window1 = new JFrame("撤銷視窗"); //建立標題名
        JFrame window2 = new JFrame("退出程式");
        window1.setBounds(0,0,400,200);// 顯示X軸位置,顯示Y軸位置 ,寬,長
        window2.setBounds(400,0,400,200);
        window1.setVisible(true); // 視窗預設是不可見的
        window1.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        //設定單擊窗體右上角關閉圖示後,程式會做出怎樣的處理。
        window2.setVisible(true);
        window2.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

2.2 選單條、選單、選單項

視窗中的選單條、選單、選單項是我們所熟悉的元件,選單放在選單條裡,選單項放在選單中。

  • 選單條
    JComponent類的子類 JMenubar 負責建立選單條,即JMenubar 的一個例項就是一個選單條,JFrame類用一個把選單條放到視窗的方法:

    setJMenuBar( JMenuBar bar);

    該方法將選單條新增到視窗的頂端,需要注意的是,只能向視窗新增一個選單條。

  • 選單
    JComponent類的子類JMenu負責建立選單,即JMenu的一個例項就是一個選單。

  • 選單項
    JComponent類的子類JMenuItem負責建立選單項,即JMenuItem的一個例項就是一個選單項
 JMenuItem(String text, Icon icon) 
  • 1
  • 1
  • 嵌入子選單
    JMenuJMenuItem的子類,因此選單本身也是一個選單項,當把一個選單看作選單項新增到摸個選單中時,稱這個選單為子選單。

  • 選單上的圖示
    可以用 圖示類Icon宣告一個圖示,使用ImageIcon類建立一個圖示。

Icon icon = new ImageIcon("a.png");
  • 1
  • 1

然後選單項呼叫setIcon(Icon icon)設定圖示

示例-帶選單的視窗

帶選單的視窗圖片

圖片資源a.png、b.png、c.png、d.png存放到專案目錄下

Main.java

public classMain {
    public static void main(String[] args) {
        WindowMenu win = new WindowMenu("帶視窗的選單", 20, 30, 400, 500);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

WindowMenu.java

import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.KeyStroke;
import javax.swing.WindowConstants;

/**
 * 自定義視窗WindowMenu
 * @author Peng
 */
public classWindowMenuextendsJFrame {
    JMenuBar menubar;
    JMenu menu, subMenu;
    JMenuItem item1, item2;

    public WindowMenu() {
    }

    public WindowMenu(String s, int x, int y, int w, int h) {
        init(s);
        setLocation(x, y);
        setSize(w, h);
        setVisible(true);
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    }

    void init(String s) {
        setTitle(s);
        menubar = new JMenuBar();
        menu = new JMenu("選單"); // JMnud的例項就是一個選單

        /**
         * 一級選單項
         */
        subMenu = new JMenu("軟體專案"); // 子選單
        item1 = new JMenuItem("Java話題"); // 建立選單項
        //為選單項設定圖示
        ImageIcon icon = new ImageIcon("a.png");
        item1.setIcon(icon);

        //使用JMenuItem的構造方法設定圖示
        item2 = new JMenuItem("動畫話題", new ImageIcon("b.png"));
        item1.setAccelerator(KeyStroke.getKeyStroke('A'));
        item2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_MASK));
        menu.add(item1);
        menu.addSeparator();
        menu.add(item2);
        menu.add(subMenu);
        /**
         * 新增二級選單項
         */
        subMenu.add(new JMenuItem("汽車銷售系統", new ImageIcon("c.png")));
        subMenu.add(new JMenuItem("農場資訊系統", new ImageIcon("d.png")));
        menubar.add(menu); // 選單條中加入選單
        setJMenuBar(menubar); // 新增一個選單條

    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64

3 常用元件與佈局

3.1 常見元件

  • 文字框
    使用JComponent的子類JTextField建立文字框。文字框的允許使用者輸入單行文字。

  • 文字區
    使用JComponent的子類JButton類建立按鈕,允許使用者單擊按鈕。

  • 標籤
    使用JComponent的子類JLabel類建立標籤,標籤為使用者提供資訊提示。

  • 選擇框
    使用JComponent的子類JCheckBox類來建立選擇框,為使用者提供多項懸著。選擇框提供兩種狀態,選中和未選中,使用者通過單擊該元件切換狀態。

  • 單選按鈕
    使用JComponent的子類的JRadioButton類建立單項選擇框,為使用者提供單項選擇。

  • 下拉列表
    使用JComponent的子類的JComboBox類來建立下拉列表,為使用者提供下拉列表。

  • 密碼框
    使用JComponent的子類的子類JPasswordField建立密碼框,允許輸入單行密碼,密碼框預設回顯字元是“*”,也可以通過setEchoChar(char c)來重新設定回顯字元。密碼框呼叫char[] getPassword()方法可以返回實際的密碼。

示例 -常見元件

效果圖:

這裡寫圖片描述

Main.java

public classMain {
    public static void main(String[] args) {
        ComponentInWindow win = new ComponentInWindow();
        win.setBounds(100, 100, 320, 310);
        win.setTitle("常用元件");
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

ComponentInWindow.java

import java.awt.FlowLayout;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPasswordField;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public classComponentInWindowextendsJFrame {

    JTextField text;
    JButton button;
    JCheckBox checkBox1, checkBox2, checkBox3;
    JRadioButton radio1, radio2;
    ButtonGroup group;
    JComboBox<Object> comBox;
    JTextArea area;
    JPasswordField password;

    public ComponentInWindow() {
        init();
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    void init() {
        setLayout(new FlowLayout()); // 設定佈局

        add(new JLabel("文字框:"));
        text = new JTextField(10);
        add(text);

        add(new JLabel("按鈕:"));
        button = new JButton("確認");
        add(button);

        add(new JLabel("密碼框:"));
        password = new JPasswordField(10);
        add(password);

        add(new JLabel("按鈕:"));
        button = new JButton("確認");
        add(button);

        add(new JLabel("選擇框:"));
        checkBox1 = new JCheckBox("喜歡音樂");
        checkBox2 = new JCheckBox("喜歡旅遊");
        checkBox3 = new JCheckBox("喜歡籃球");
        add(checkBox1);
        add(checkBox2);
        add(checkBox3);

        add(new JLabel("單選按鈕:"));
        group = new ButtonGroup();
        radio1 = new JRadioButton("男");
        radio2 = new JRadioButton("女");
        group.add(radio1);
        group.add(radio2);
        add(radio1);
        add(radio2);

        add(new JLabel("下拉列表:"));
        comBox = new JComboBox<>();
        comBox.addItem("音樂天地");
        comBox.addItem("武術天地");
        comBox.addItem("象棋樂園");
        add(comBox);

        add(new JLabel("文字區"));
        area = new JTextArea(6, 13);// 文字區設定行數和列數
        add(new JScrollPane(area));
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80

3.2 常見容器

JComponent 是 Comtainer的 子類,因此 JComponent 的子類建立的元件也都是容器,但我們很少將 JButton、JTextField、JCheckBox 等元件當容器來使用。JComponent 專門提供了一些經常用來新增組建的容器。相對於底層容器 JFrame ,下面提到的容器被習慣地稱為中間容器,中間容器必須被新增到底層容器中才能發揮作用。

  • Jpanel面板
    我們會經常使用 JPanel 建立一個面板,再向這個面板新增元件,然後把這個面板新增到其他容器中。JPanel 面板的預設佈局是 FlowLayout 佈局。

  • 滾動窗格 JScrollPane

  • 拆分窗格 JSpitPane

  • 分層窗格 JLayeredPane

3.3 常用佈局

當把元件新增到容器中時,希望控制組件在容器中的位置,這就需要用到佈局設計。
容器可以使用方法設定自己的佈局。

setLayout(佈局物件);
  • 1
  • 1

設定自己的佈局。

  • FlowLayout 佈局
    FlowLayout 類建立的物件稱作 FlowLayout 型佈局。FlowLayout 型佈局是 JPanel 型佈局的預設佈局,即 JPanel 及其子類建立的容器物件,如果不專門指定佈局,則他們的佈局就是 FlowLayout 佈局。
FlowLayout flow = new FlowLayout(); // 居中對齊
容器.setLayout(flow);
  • 1
  • 2
  • 1
  • 2

or

setLayout(new FlowLayout());
  • 1
  • 1

通過add 方法將元件按先後順序,從左到右,預設水平和垂直間隙是 5 個畫素的方式排列。元件的大小為預設的最佳大小,例如,控制元件的大小剛好能保證顯示其上面的名字。

  • BorderLayout 佈局
  • CardLayout 佈局
  • GridLayout 佈局
  • BoxLayout 佈局
  • null 佈局

4 處理事件

處理元件的點選或者選擇事件。

4.1 事件處理模式

  • 事件源
    能夠產生處理了事件的物件都可以成為事件源,如文字框,按鈕,下拉式列表等。也就是說,事件源必須是一個物件,而且這個物件必須是Java認為能夠發生事件的物件。

  • 監視器
    我們需要一個物件對事件源進行監視,以便對發生的事件作出處理。事件源通過呼叫相應的方法將某個物件註冊為自己的監視器。例如,對於文字框,這個方法是:

addActionListener(監視器);
  • 1
  • 1

對於註冊監視器的文字框,在文字框獲得焦點後,當用戶對文字框進行操作,如按下回車鍵,Java 執行環境就會自動用 ActionEvent 類建立一個物件,觸發 ActionEvent 事件 。對文字框進行相應的操作就會導致相應的事件發生,並通知監視器,監視器就會做出相應的處理。

  • 處理事件的介面
    為了讓監視器這個物件能夠對事件源發生的事件進行處理,建立該檢視物件的類必須實現相應的介面,即必須在類體中重寫介面的所有方法,那麼當事件源發生事件是,監視器會自動呼叫類中被重寫的介面方法。

這裡寫圖片描述

4.2 ActionEvent 事件

  • ActionEvent 事件源
    文字框、按鈕、選單項、密碼框、和單選按鈕都可以觸發事件,都可以成為事件源。

  • 註冊監視器
    能觸發 ActionEvent 事件的元件,使用 addActionListener(ActionListener listen),將實現 ActionListener 介面的類的例項註冊為事件源的監視器。

  • ActionListener 介面
    ActionListener 介面位於 java.awt.event包中,該介面只有一個方法

public void actionPerformed(ActionEvent e)
  • 1
  • 1

在這裡執行想要的操作

  • ActionEvent 類中的方法
public Object getSourcee() 獲取事件源物件的引用,返回向上轉型為Object物件的應用

publi String getActionCommand() 獲取和事件發生的一個命令字串,例,文字框引發事件,文字框內的文字字串就是和該事件相關的一個命令字串。
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

示例-文字框監聽事件

在文字框內輸入檔名(預設目錄下要有檔案),回車後,通過BufferReader流讀出內容。

這裡寫圖片描述

這裡寫圖片描述

Main.java

public classMain {
    public static void main(String[] args) {
        WindowActionEvent win = new WindowActionEvent();
        win.setBounds(100,100,310,260);
        win.setTitle("處理ActionEvent事件");
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

WindowActionEvent.java

import java.awt.FlowLayout;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;

import javax.swing.JFrame;
import javax.swing.JTextField;

public classWindowActionEventextendsJFrame {
    JTextField text;
    ReaderListen listener;

    public WindowActionEvent() throws HeadlessException {
        init();
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    void init() {
        setLayout(new FlowLayout());
        text = new JTextField(10);
        listener = new ReaderListen();
        text.addActionListener(listener);
        add(text);
    }
}

class ReaderListen implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {
        String fileName = e.getActionCommand();
        System.out.println(fileName + "內容如下:");
        try {
            File file = new File(fileName);
            FileReader inOne = new FileReader(file);// 在專案目錄下 自己把Main.java複製一份到專案目錄下
            BufferedReader inTwo = new BufferedReader(inOne);
            String s = null;
            while ((s = inTwo.readLine()) != null) {
                System.out.println(s);
            }
            inOne.close();
            inTwo.close();
        } catch (Exception e2) {
            e2.printStackTrace();
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51

示例2-文字框、文字區框、按鈕的監聽事件

效果圖:

文字框、文字區框、按鈕的監聽事件

這裡寫圖片描述

Main.java

public classMain {
    public static void main(String[] args) {
        WindowActionEvent win = new WindowActionEvent();
        win.setBounds(100,100,360,300);
        win.setTitle("處理ActionEvent事件");
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

WindowActionEvent.java

import java.awt.FlowLayout;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public classWindowActionEventextendsJFrame {
    JTextField text;
    JTextArea textShow;
    JButton button;
    ReaderListen listener;

    public WindowActionEvent() throws HeadlessException {
        init();
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    void init() {
        setLayout(new FlowLayout());
        text = new JTextField(10);
        button = new JButton("讀取");
        textShow = new JTextArea(9,30);
        listener = new ReaderListen();
        listener.setJTextField(text);
        listener.setJTextArea(textShow);
        text.addActionListener(listener);
        button.addActionListener(listener);
        add(text);
        add(button);
        add(new JScrollPane(textShow));
    }
}

class ReaderListen implements ActionListener {
    JTextField text;
    JTextArea textShow;

    public void setJTextField(JTextField text) {
        this.text = text;
    }



    public void setJTextArea(JTextArea textShow) {
        this.textShow = textShow;
    }


    @Override
    public void actionPerformed(ActionEvent e) {

        try {
            File file = new File(text.getText()); //getDocument()
            FileReader inOne = new FileReader(file);
            BufferedReader inTwo = new BufferedReader(inOne);
            String s = null;
            while ((s = inTwo.readLine()) != null) {
                textShow.append(s+"\n");
            }
            inOne.close();
            inTwo.close();
        } catch (Exception e2) {
            e2.printStackTrace();
        }

    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77

4.3 ActionItem 事件

  • Item事件源
    選擇框和下拉列表都可以觸發 ItemEvent 事件。選擇框提供兩種狀態,一種是未選中,另一種是選中,使用者點選切換了狀態,就會觸發 ItemEvent 事件。對於下拉列表,使用者選中了下拉列表中某個選項,就會觸發 ItemEvent 事件。

  • 註冊監視器
    選擇框和下拉列表元件使用addItemListener(ItemListener listen),註冊為事件源的監視器。

  • ItemListener 介面

class MyListener implements ItemListener{
        @Override
        public void itemStateChanged(ItemEvent e) {
            // 觸發事件後,你想要的操作
        }       
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

ItemEvent 事件物件使用 getSource() 方法返回 ItemEvent 事件源,使用 getItemSelectable 方法返回發生 ItemEvent 事件的事件源。

    @Override
    public void itemStateChanged(ItemEvent e) {
    ...
    e.getSource();
    e.getItemSelectable();
    .
    ..
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

示例 -下拉列表

下拉列表的選項是當前目錄下Java檔案的名字,使用者選擇下拉列表的選項後,監視器負責在文字區顯示檔案的內容。

效果圖:

這裡寫圖片描述

Main.java

public classMain {
    public static void main(String[] args) {
        WindowActionEvent win = new WindowActionEvent();
        win.setBounds(100, 100, 400, 300);
        win.setTitle("處理ItemEvent事件");
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

WindowActionEvent.java

import java.awt.FlowLayout;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FilenameFilter;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public classWindowActionEventextends
            
           

相關推薦

JAVA圖形介面設計

圖形介面設計 1 Java Swing 概述 圖形化介面(Graphics User Interface,GUI)是指採用圖形方式顯示的計算機操作使用者介面。 通過圖形化介面,使用者和程式之間可以方便地進行互動。Java的抽象視窗工具包(Abstract Window Toolkit,

Java圖形介面的基本設計

一、圖形介面的基本設計思路: 1,建立一個窗體,利用窗體類 2,向窗體中新增標籤,標籤類 3,向窗體中新增按鈕,按鈕類 二、詳細程式碼  注意:1,在建立的這個介面類中需要繼承監聽介面來實現相應的增大字型的功能。       &nb

Java筆記(10)-圖形介面設計、Swing、視窗、JFrame、常用元件和佈局、處理事件、MVC結構、對話方塊、GUI

我希望有個如你一般的人 如山間清爽的風 如古城溫暖的光 只要最後是你就好 今天 你路過了誰 誰又丟失了你呢 或者 從你的全世界路過 圖形介面設計 1 Java Swing 概述 圖形化介面(Graphics User Int

201671010145 2016-2017《Java程序設計JAVA圖形程序設計基本框架

window 窗口 found 完全 str kit 圖形 awt abstract 在Java 1.0 剛剛出現的時候,包含了一個用於基本GUI程序設計的類庫,Sun將它稱為抽象窗口工具箱(Abstract Window Toolkit, AWT)。 1996年,Nets

java圖形介面程式設計換面板

前言 總所周知,java圖形介面效果不是特別理想,於是在網上找了一些非常好看的面板 面板地址:面板地址 使用 下載了一款名為weblaf的面板,使用也很簡單,匯入jar包後,在main方法中,JFrame定義之前呼叫install();方法即可。 public

Linux下,Java圖形介面程式中文顯示不正常(顯示為方格)問題解決

RedHat或其它Linux系統下中文顯示為方格,原因是JRE環境中中文字型設定異常。 1.首先找到JRE所在的目錄,如在RedHat Enterprise 6中的目錄為:/usr/lib/jvm/java-1.6.0/jre 2.將windows中文字型simsun.ttf或simsun.ttc拷

java圖形介面設定求商 求差

/* 2 編寫一個Java Application圖形介面的程式,實現兩數相減、相除的功能 (1) 在兩個文字框裡分別輸入兩個數字,單擊“求差”、“求商”按鈕,則在第三個文字框裡顯示運算結果; (2) 當輸入的不是數字或者除數為0時,要求用訊息對話方塊向用戶報錯; (3) 單擊視窗右上角的“X”按鈕

JS使用WebSocket實現與Java圖形介面(swing)進行通訊

背景:做專案的時候有過這樣的一個需求,在訪問某個網頁的時候進行登入,需要瀏覽器獲取電腦的硬體資源,但是通過瀏覽器直接讀取的方式有些不便,所以想到使用Java開發一個圖形應用介面的程式讀取電腦程式通過socket通訊傳輸給html頁面用於驗證。 寫在前面:在Java伺服器這端

Java圖形介面-JComboBox

JComboBox的事件處理亦可分為兩種,一種是取得使用者選取的專案;另一種是使用者在JComboBox上自行輸入完畢後按下[Enter]鍵, 運作相對應的工作。對於第一種事件的處理,我們使用ItemListener.對於第二種事件的處理,我們使用ActionListen

Java圖形介面事件監聽處理

                              Java圖形介面事件監聽處理 文章開始把我喜歡的這句話送個大家:這個世界上還有什麼比自己

java圖形介面視覺化開發3大GUI外掛

上大學那會兒比較主流的Java圖形開發外掛是:Visual Editor 和 SWT Designer, 不久又出了個Jigloo, 但去官網看了下發現這個東西也很久沒有更新了,不過據說短小精悍,五臟俱全。SWT Designer不久前也被Google收購後重新整合進自己

OpenCV學習筆記(二十五)——OpenCV圖形介面設計Qt+VS2008

一直對MFC對OpenCV的支援不好而耿耿於懷,瞭解了Qt對OpenCV支援很好,但網上這方面的資料很少。大部分的圖形互動的設計都是基於OpenCV2.0之前的資料結構lpImage進行的。最近得到了一本好書《OpenCV 2 Computer Vision Applica

Java 圖形介面開發--圖文並茂建立學生管理系統

           圖形使用者介面(Graphics User Interface,GUI)是使用者與程式互動的視窗,比命令列的介面更加直觀並且更好操作。      這是本人在學習java圖形介面開發階段一步一步實現的超級簡易的學生管理系統。雖然說不入大神法眼,但這確實是費

Java圖形介面——選項卡窗格、面板元件、網格佈局

package com.test.swing; import java.awt.*; import javax.swing.*; public class QLogin extends JFrame{ //定義元件 //北部區域 JLabel jl1; //

Java圖形介面開發—簡易登入註冊小程式

登入註冊小程式碼,將學過的一些小知識融合在一起進行了使用,加深印象。本例中如果有註釋不詳細的地方,詳見其它部落格。功能介紹:簡單的登入註冊系統,使用了資料庫sqlserver、單例模式、正則表示式以及圖形化開發等知識。1、在登入介面,可以登入或者註冊使用者。 註冊使用者介面,

n皇后問題回溯法---java圖形介面實現回溯過程

/*<span style="white-space:pre"> </span>by wbin 2015/12/18實現n皇后問題的回溯法過程,以java圖形介面展示,程式碼寫得略醜,見諒.*/import java.awt.Color; impo

碼農小汪-SQL 圖形介面設計約束,unqiue,check Default Foreign

怎麼說呢,這個東西並不是經常的使用,慢慢的記不住怎麼玩得啦,網上找的資料,複習複習哈! SQLServer中有五種約束,Primary Key約束、Foreign Key約束、Unique約束、Default約束和Check約束,今天使用SQL 1、Pri

Java圖形介面程式設計(一)

初步認識swing  awt   AWT(abstract Window Toolkit)是java釋出的第一個圖形介面庫。AWT通過呼叫系統本地的庫,來建立和顯示控制元件。 AWT 的元件都是使用

Java圖形介面

java 有一個強大的的API(Application Programming Interface應用程式程式設計介面))類,利用這些API類我們可以完成許多功能,今天我們要做的是圖形介面的製作。 圖形介面要用什麼來實現呢?先介紹Swing元件,它的特點是可插入外觀元件

Java圖形介面基礎案例-飛行的小球

前面幾次一直都在講靜物,做了烏龜,做了星星,有想法的coder們就在想怎麼樣才能讓這些東西動起來呢,這也就是推動技術發展的動力,好在這次總算是給大家帶來了能讓物體動起來的技術,我們現在先不已前面的烏龜和星星為案例繼續講如何寫運動的物體,還是先從最簡單的物體開始,