iT邦幫忙

2022 iThome 鐵人賽

DAY 19
0
Software Development

大學耍廢的我要學Java翻身系列 第 19

Day19: Swing元件(上)

  • 分享至 

  • xImage
  •  

Swing視窗架構是由一個JFrame元件放入JPanel容器,再加入JLabel、JButton等元件
今天我們要說到的有:

  1. JLabel標籤
  2. JTextField文字欄位
  3. JButton按鈕
  4. ImageIcon圖像
  5. JOptionPane對話框
    這幾個都是前面稍微碰到的元件,今天要來介紹它們的功能

JLabel => 顯示文字、圖片

用JLabel顯示文字

JLabel(String text, int horizontalAlignment) 如果不須定義位置horizontalAlignment可不寫
horizontalAlignment => LEFT, RIGHT, CENTER, LEADING, TRAILING
用法: JLabel myJLabel = new JLabel("Your text");

用JLabel顯示圖片

public JLabel(Icon image, int horizontalAlignment) 如果不須定義位置horizontalAlignment可不寫
用法: JLabel myJLabel = new JLabel(icon1, JLabel.CENTER);
=> 顯示一個名為icon1的icon圖示,並置中

同時顯示文字和圖片

public JLabel(String text, Icon image, int horizontalAlignment)
用法: JLabel myJLabel = new JLabel("Here is is your tag", icon1, JLabel.CENTER);

常用方法

  1. getIcon() => 取得JLabel的ImageIcon
  2. getText() => 取得JLabel的字串
  3. setIcon(Icon icon1) => 設定JLabel的ImageIcon為icon1
  4. setText(String Text) => 設定JLabel的字串為Text
    因為說道圖片就一起來說ImageIcon元件

ImageIcon => 圖像元件

ImageIcon(String filename)
filname => 圖像路徑
用法: ImageIcon icon = new ImageIcon("路徑")

import javax.swing.*;   // 載入swing套件
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

class MyJFrame extends JFrame {  // 定義我們的JFrame類別繼承JFrame
    private JPanel contentPane;
    String[] imgName = new String[]{"Panda", "Cat", "Dog"};
    JLabel[] lbl = new JLabel[imgName.length];
    JLabel[] lblImg = new JLabel[imgName.length];
    MyJFrame(){
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(650, 400, 635, 300);
        contentPane = new JPanel();
        setContentPane(contentPane);
        contentPane.setLayout(null);

        for (int i=0; i<imgName.length; i++){
            lblImg[i] = new JLabel();
            lblImg[i].setIcon(new ImageIcon("C:\\Users\\Max\\OneDrive\\桌面\\image\\" + imgName[i] + ".jpg"));
            lblImg[i].setBounds(i*200 + 20, 30, 180, 135);
            contentPane.add(lblImg[i]);
            lbl[i] = new JLabel(imgName[i]);
            lbl[i].setBounds(i*200 + 100, 180, 50, 20);
            contentPane.add(lbl[i]);
        }
        setVisible(true);
    }
}
public class Main extends JPanel{
    public static void main(String[] args) {
        MyJFrame window = new MyJFrame();
    }
}

接著我想做一個帳密登入的跳出框
所以其他的元件一併介紹完一次結合起來使用

JTextField => 輸入文字的地方

JTextField(String text, int columns)
text => 要顯示的字串 | columns => 設定欄位寬度是幾行
用法: JTextField jtxtF = new JTextField("一起來寫Java", 25);

常用方法

  1. getColumns()、getText() => 取得行數、文字
  2. getSelectedText() => 取得被選取(反白)的文字
  3. setColumns(int columns)、setText(String Text) => 設定寬度、文字
  4. setEditable(boolean b) => 設定是否可以編輯

JButton => 就是按鈕...

注意: 除了要繼承JFrame還要實作addActionListener
JButton(String text, Icon icon)
用法: JButton jbtn = new JButton("確認", icon);

常用方法

  1. getIcon()、getText() => 取得icon、文字
  2. setIcon()、setText() => 設定icon、文字

JOptionPane => 跳出的對話框

JOptionPane(Object message, int messageType, int optionType)
messageType:

  1. ERROR_MESSAGE => x
  2. INFORMATION_MESSAGE => i
  3. WARNING_MESSAGE => !
  4. QUESTION_MESSAGE => ?
  5. PLAIN_MESSAGE => 沒有圖示
    optionType:
  6. DEFAULT_OPTION => 是
  7. YES_NO_OPTION => 是 否
  8. YES_NO_CANCEL_OPTION => 是 否 取消
  9. OK_CANCEL_OPTION => 確定 取消
    用法: JOptionPane joptp = new JOPtionPane("Java很好玩",
    JOptionPane.QUESTION_MESSAGE,
    JOptionPane.YES_NO_OPTION);

常用方法

parent是對話框的父視窗的意思

  1. static String showInputDialog(Component parent, Object message)
    => 可直接呼叫,會產生一個可以有文字欄位的對話框,而且會回傳輸入的字串
  2. static String showMessageDialog(Component parent, Object message)
    => 可直接呼叫,會產生一個對話框
  3. static String showConfirmDialog(Component parent, Object message)
    => 可直接呼叫,回傳一個和JOptionPane建構式類似功能的對話框
import javax.swing.*;
import java.awt.event.*;

class MyJFrame extends JFrame {
    private JPanel contentPane;
    private JTextField txtId, txtPwd;
    private JLabel lblId, lblPwd;
    private JButton btnLogin;

    MyJFrame() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 280, 180);
        contentPane = new JPanel();
        setContentPane(contentPane);
        contentPane.setLayout(null);

        txtId = new JTextField();
        txtId.setToolTipText("輸入你的帳號");
        txtId.setColumns(20);
        txtId.setBounds(100, 20, 120, 25);
        contentPane.add(txtId);

        txtPwd = new JTextField();
        txtPwd.setToolTipText("輸入你的密碼");
        txtPwd.setColumns(20);
        txtPwd.setBounds(100, 60, 120, 25);
        contentPane.add(txtPwd);

        lblId = new JLabel("帳號:");
        lblId.setBounds(50, 25, 100, 15);
        contentPane.add(lblId);

        lblPwd = new JLabel("密碼:");
        lblPwd.setBounds(50, 65, 100, 15);
        contentPane.add(lblPwd);

        btnLogin = new JButton("登入");
        btnLogin.setBounds(100, 100, 80, 25);
        contentPane.add(btnLogin);
        btnLogin.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (txtId.getText().equals("account") && txtPwd.getText().equals("123456")) {
                    JOptionPane.showMessageDialog(null, "登入成功", "登入中", JOptionPane.INFORMATION_MESSAGE);
                } else {
                    JOptionPane.showMessageDialog(null, "帳密錯誤", "登入中", JOptionPane.ERROR_MESSAGE);
                }
            }
        });
        setVisible(true);
    }
}

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

        MyJFrame f = new MyJFrame();
    }
}


上一篇
Day18: JFrame教學
下一篇
Day20: Swing元件(中)
系列文
大學耍廢的我要學Java翻身30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言