天天看點

Java--GUI之窗體的建立群組件的添加Swing

Swing

前言

這裡是 Java--GUI 系列文章,主要介紹Java中的圖形化界面程式設計及其實作。

Java的圖形化界面程式設計除了在自學中可以直覺地感受到效果,還會在考試的題目中察覺到重要性

關于作者:

轉載請注明出處

正文

第一個JFrame視窗

忽略掉沒講到的内容會在後續涉及到

首先建立一個運作類,用來存放主方法

/**
 * Application 類
 * 操作人:小白
 * 日期:2021/11/8
 * 時間:13:02
 * @author 别欺負小白了好咩
 */
public class Application {
    public static void main(String[] args) {
        MyFirstFrame test = new MyFirstFrame();
        test.drawFrame();
        test.drawFrame(200,300,50,100);
        test.drawFrame();
    }
}
           

其次建立一個窗體類,其中帶有窗體執行個體化以及繪制窗體的方法

import javax.swing.*;
import java.awt.*;
/**
 * MyFirstFrame 類
 * 操作人:小白
 * 日期:2021/11/8
 * 時間:13:04
 * @author 别欺負小白了好咩
 */
public class MyFirstFrame {
    int WIDTH;
    int HEIGHT;
    int LOCATION_X;
    int LOCATION_Y;

    JFrame f =  new JFrame("第一個Swing窗體");

    public void drawFrame(){
        f.setSize(300,100);
        f.setBackground(Color.WHITE);
        f.setLocation(500,500);
        f.setVisible(true);
        System.out.println("預設視窗已顯示");
    }

    public void drawFrame(int WIDTH, int HEIGHT, int LOCATION_X, int LOCATION_Y) {
        f.setSize(WIDTH,HEIGHT); ;
        f.setBackground(Color.WHITE);
        f.setLocation(LOCATION_X,LOCATION_Y);
        f.setVisible(true);
        System.out.println("自定義視窗已顯示");
    }
}           

以上代碼僅作參考代碼,具體教學思路請對照下面來看

首先在窗體繪制後,我們可以指定窗體的大小,背景顔色,位置以及是否顯示。

但是在打開多個視窗後(運作多次視窗繪制方法),隻會出現一個視窗,具體原因是由于我們隻執行個體化了一個視窗對象,其餘的幾次隻是在那基礎上做了一些參數的修改,以下代碼實作了打開多個視窗

import javax.swing.*;
import java.awt.*;
/**
 * MyFirstFrame 類
 * 操作人:小白
 * 日期:2021/11/8
 * 時間:13:04
 * @author 别欺負小白了好咩
 */
public class MyFirstFrame {
    int WIDTH;
    int HEIGHT;
    int LOCATION_X;
    int LOCATION_Y;



    public void drawFrame(){
        JFrame f =  new JFrame("這是預設視窗");
        f.setSize(300,100);
        f.setBackground(Color.WHITE);
        f.setLocation(500,500);
        f.setVisible(true);
        System.out.println("預設視窗已顯示");
    }

    public void drawFrame(int WIDTH, int HEIGHT, int LOCATION_X, int LOCATION_Y) {
        JFrame f =  new JFrame("這是自定義視窗");
        f.setSize(WIDTH,HEIGHT); ;
        f.setBackground(Color.WHITE);
        f.setLocation(LOCATION_X,LOCATION_Y);
        f.setVisible(true);
        System.out.println("自定義視窗已顯示");
    }
}           

使用前面的方法會避免建立多餘的視窗,具體看需求來選擇如何實作。

JLabel 标簽元件

可以将JFrame了解為一個盤子,那麼盤子上自然就可以承載其他的物品(元件),而這些元件隻需要放上去(add)就可以随着盤子一起呈現給使用者了。

JLabel 類的常用方法和常量

序号 方法或常量 類型 作用
1 public static final int LEFT 常量 标簽文本左對齊
2 public static final int CENTER 标簽文本居中對齊
3 public static final int RIGHT 标簽文本右對齊
4 public JLabel() throws HeadlessException 構造 建立一個JLabel對象
5 public JLabel(String text) throws HeadlessException 建立一個标簽并指定文本内容
6 public JLabel(String text,int alignment) throws HeadlessException 建立一個标簽并指定文本内容以及對齊方式,可以使用JLabel.LEFT 、JLabel.RIGHT、 JLabel.CENTER3個值
7 public JLabel(String text,Icon icon,int alignment) throws HeadlessException 建立具有指定文本、圖像和水準對齊方式的JLabel對象
8 public JLabel(Icon image,int alignment) 建立具有指定圖像和水準對齊方式的JLabel執行個體
9 public void setText(String text) 普通 設定标簽的文本
10 public String getText() 取得标簽的文本
11 public void setAlignment(int alignment) 設定标簽對齊方式
12 public void setIcon(Icon icon) 設定指定的圖像

示例代碼如下

import javax.swing.*;

/**
 * Application 類
 * 操作人:小白
 * 日期:2021/11/8
 * 時間:13:02
 * @author 别欺負小白了好咩
 */
public class Application {
    public static void main(String[] args) {
        MyFirstFrame test = new MyFirstFrame();
        test.drawFrame();
        test.addJLabel(new JLabel("這是一個标簽文本"),test.f);
    }
}           
import javax.swing.*;
import java.awt.*;
/**
 * MyFirstFrame 類
 * 操作人:小白
 * 日期:2021/11/8
 * 時間:13:04
 * @author 别欺負小白了好咩
 */
public class MyFirstFrame {
    int WIDTH;
    int HEIGHT;
    int LOCATION_X;
    int LOCATION_Y;
    JFrame f =  new JFrame("這是一個視窗");

    public void drawFrame(){
        f.setSize(300,100);
        f.setBackground(Color.WHITE);
        f.setLocation(500,500);
        f.setVisible(true);
        System.out.println("預設視窗已顯示");
    }

    public void drawFrame(int WIDTH, int HEIGHT, int LOCATION_X, int LOCATION_Y) {
        f.setSize(WIDTH,HEIGHT); ;
        f.setBackground(Color.WHITE);
        f.setLocation(LOCATION_X,LOCATION_Y);
        f.setVisible(true);
        System.out.println("自定義視窗已顯示");
    }

    public void addJLabel(JLabel jLabel,JFrame jFrame){
        jFrame.add(jLabel);
        System.out.println("标簽元件已添加完畢!");
    }

}           
其中标簽文本也可以定義成類變量來以便不需要臨時執行個體化,這樣的好處在于可以修改樣式以及修改内容,具體可以看需求,這裡僅做示範

JButton 按鈕元件

按鈕元件使用跟标簽元件大體相似,這裡不一一列舉其常用方法,僅作示例

根據之前的調整,我們的代碼可以修改為下面這樣
import javax.swing.*;

/**
 * Application 類
 * 操作人:小白
 * 日期:2021/11/8
 * 時間:13:02
 * @author 别欺負小白了好咩
 */
public class Application {
    public static void main(String[] args) {
        MyFirstFrame test = new MyFirstFrame();
        test.drawFrame();
        test.drawJLabel("這個是窗體之上的标簽");
        test.drawJButton("這個是窗體之上的按鈕");
        test.addJLabel(test.l,test.f);
        test.addJLabel(test.b,test.f);
    }
}           
import javax.swing.*;
import java.awt.*;
/**
 * MyFirstFrame 類
 * 操作人:小白
 * 日期:2021/11/8
 * 時間:13:04
 * @author 别欺負小白了好咩
 */
public class MyFirstFrame {
    int WIDTH;
    int HEIGHT;
    int LOCATION_X;
    int LOCATION_Y;
    JFrame f =  new JFrame("這是一個視窗");
    JLabel l = new JLabel("這是一個标簽");
    JButton b = new JButton("這是一個按鈕");

    public void drawFrame(){
        this.drawFrame(300,100,500,500);
    }

    public void drawFrame(int WIDTH, int HEIGHT, int LOCATION_X, int LOCATION_Y) {
        f.setSize(WIDTH,HEIGHT); ;
        f.setBackground(Color.WHITE);
        f.setLocation(LOCATION_X,LOCATION_Y);
        f.setVisible(true);
        System.out.println("視窗已顯示");
    }

    public void drawJLabel(String text){
        l.setText(text);
        System.out.println("标簽内容已修改為: --> " + text);
    }

    public void drawJButton(String text){
        b.setText(text);
        System.out.println("按鈕内容已修改為: --> " + text);
    }

    public void addJLabel(Container container,JFrame jFrame){
        jFrame.add(container);
        System.out.println("元件已添加完畢!");
    }


}           

其中控制台輸出如下

Java--GUI之窗體的建立群組件的添加Swing

小結

多加練習才能學好