java 圖形化工具Swing 基本使用


Swing介紹:

使用Swing開發圖形界面比AWT更加優秀,因為Swing是一種輕量級組件,它采用100% Java實現,不再依賴於本地平台的圖形界面,所以可以在所有平台上保持相同的運行效果,對跨平台支持比較出色,實現了真正的一次編寫處處運行。
除此之外,Swing提供了比AWT更多的圖形界面組件,因此可以開發出更美觀的圖形界面。
 

Swing組件的基本使用

大部分Swing組件都是JComponent抽象類的直接或間接子類,JComponent類定義了所有子類組件的通用方法。JComponent類是AWT中java.awt.Container類的子類,這也是AWT和Swing的聯系之一。絕大部分Swing組件類繼承了Container類,所以Swing組件都可作為容器使用。

Swing的繼承關系結構如下:

 

上面的深色部分都是可以在AWT找到對應組件的。比如我們的JButton就和我們Awt中的Button很相似。這些和Awt有關聯的組件就是在原來Awt組件的名字前面加了一個J。但是還是有幾個例外:
  • JComboBox: 對應AWT里的Choice組件,但比Choice組件功能更豐富
  • JFileChooser: 應於AWT里的FileDialog組件
  • JScrollBar: 對應於AWT里的Scrollbar組件,注意兩個組件類名中 字母的大小寫差別。
  • JCheckBox 對應於AWT里的checkbox組件,注意兩個組件類名中 字母的大小寫差
  • JCheckBoxMenuitem: 對應於AWT里的CheckboxMenuItem 組件,注意兩個組件類名中字母的大小寫差別。
在AWT中的東西,除了Canvas之外,別的所有的Awt組件都提供了相應的實現,Swing組件比AWT組件的功能更加強大。相對於AWT組件,Swing組件具有如下4個額外功能。
  • (1),可以為Swing組件設置提示信息。用setToolTipText()方法。
  • (2),很多Swing組件,比如我們的按鈕,標簽,菜單項等,除了使用文字之外,還可以用圖標來修飾自己。Swing為Icon接口提供了一個實現類:ImageIcon
  • (3),支持插拔式的外觀風格。
  • (4),支持設置邊框

示例程序截圖:

 

示例代碼:

package swingtest;

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

/**
 * @ClassName SwingComponent
 * @projectName: object1
 * @author: Zhangmingda
 * @description: XXX
 * date: 2021/5/8.
 */
public class SwingComponent {
    public static void main(String[] args) {
        JFrame jFrame = new JFrame("Swing基本組件");
        //菜單欄
        JMenuBar jMenuBar = new JMenuBar();
        //菜單項
        JMenu fileMenu = new JMenu("文件");
        JMenu editMenu = new JMenu("編輯");
        //菜單子項
        JMenuItem newMenuItem = new JMenuItem("新建",new ImageIcon("圖形化編程/src/swingtest/ico/new.png"));
        JMenuItem saveMenuItem = new JMenuItem("保存",new ImageIcon("圖形化編程/src/swingtest/ico/new.png"));
        JMenuItem exitMenuItem = new JMenuItem("退出",new ImageIcon("圖形化編程/src/swingtest/ico/new.png"));
        fileMenu.add(newMenuItem);
        fileMenu.add(saveMenuItem);
        fileMenu.add(exitMenuItem);
        //編輯菜單子項
        //菜單子項
        JMenuItem autoLenMenuItem = new JMenuItem("自動換行",new ImageIcon("圖形化編程/src/swingtest/ico/new.png"));
        JMenuItem copyMenuItem = new JMenuItem("復制",new ImageIcon("圖形化編程/src/swingtest/ico/new.png"));
        JMenuItem pasteMenuItem = new JMenuItem("粘貼",new ImageIcon("圖形化編程/src/swingtest/ico/new.png"));
        JMenuItem noteMenuItem = new JMenuItem("注釋",new ImageIcon("圖形化編程/src/swingtest/ico/new.png"));
        JMenuItem cancleNoteMenuItem = new JMenuItem("取消注釋",new ImageIcon("圖形化編程/src/swingtest/ico/new.png"));
        JMenuItem formatJMenuItem = new JMenu("格式");
        formatJMenuItem.add(noteMenuItem);
        formatJMenuItem.add(cancleNoteMenuItem);
        editMenu.add(autoLenMenuItem);
        editMenu.addSeparator();//換行符
        editMenu.add(copyMenuItem);
        editMenu.add(pasteMenuItem);
        editMenu.addSeparator();//換行符
        editMenu.add(formatJMenuItem);
        //菜單欄添加菜單
        jMenuBar.add(fileMenu);
        jMenuBar.add(editMenu);
        jFrame.setJMenuBar(jMenuBar);
        //底部菜單
        JPanel bottomPanel = new JPanel();
        bottomPanel.add(new JTextField(30));
        bottomPanel.add(new JButton("確定"));
        jFrame.add(bottomPanel,BorderLayout.SOUTH);
        /**
         * 中間部分
         */
        Box centerBox = Box.createHorizontalBox(); //水平盒子
        /**
         * 中間左
         */
        Box centerLeftBox = Box.createVerticalBox(); //垂直盒子
        /**
         * 中間左上
         */
        JTextArea jTextArea = new JTextArea(8, 40); //文本框
        //帶滾動條的容器,創建時傳入一個文本框
        JScrollPane jScrollPane = new JScrollPane(jTextArea);
        centerLeftBox.add(jScrollPane); //中間左邊的垂直盒子添加 帶滾動條的容器
        /**
         * 中間左下
         */
        JPanel leftBottomPanel = new JPanel();
        //復選框
        leftBottomPanel.add(new JComboBox<String>(new String[]{"紅色","綠色", "藍色"})); //復選框
        //單選框、
        JRadioButton male = new JRadioButton("男",true);
        JRadioButton female = new JRadioButton("女");
        ButtonGroup sexGroup = new ButtonGroup();
        sexGroup.add(male); //單選組添加選項
        sexGroup.add(female); //單選組添加選項
        leftBottomPanel.add(male);leftBottomPanel.add(female); //左下容器添加選項
        //勾選框
        leftBottomPanel.add(new JCheckBox("婚否"));
        //中間左添加中間左下
        centerLeftBox.add(leftBottomPanel);
        /**
         * 中間右
         */
        Box centerRightBox = Box.createVerticalBox(); //后邊的垂直盒子
        centerRightBox.add(new JList<String>(new String[]{"紅色", "粉色","黃色"}));
        /**
         * 水平容器添加左邊盒子,窗口添加水平容器
         */
        centerBox.add(centerLeftBox);// 水平盒子添加左邊的盒子
        centerBox.add(centerRightBox);// 水平盒子添加右邊的盒子
        jFrame.add(centerBox); // 窗口添加水平盒子
        /**
         * 右鍵菜單
         */
        JPopupMenu popupMenu = new JPopupMenu();
        //右鍵單選框菜單項
        JRadioButtonMenuItem metalItem = new JRadioButtonMenuItem("Metal風格", true);
        JRadioButtonMenuItem nimbusItem = new JRadioButtonMenuItem("Nimbus風格");
        JRadioButtonMenuItem windowsItem = new JRadioButtonMenuItem("Windows風格");
        JRadioButtonMenuItem classicItem = new JRadioButtonMenuItem("Windows經典風格");
        JRadioButtonMenuItem motifItem = new JRadioButtonMenuItem("Motif風格");
        ButtonGroup flavorGroup = new ButtonGroup();//單選的菜單項
        flavorGroup.add(nimbusItem);
        flavorGroup.add(metalItem);
        flavorGroup.add(windowsItem);
        flavorGroup.add(classicItem);
        flavorGroup.add(motifItem);
        popupMenu.add(motifItem);
        popupMenu.add(classicItem);
        popupMenu.add(windowsItem);
        popupMenu.add(nimbusItem);
        popupMenu.add(metalItem);
        //右鍵菜單鼠標單擊監聽器
        ActionListener flavorListener = e -> {
            try {
                switch (e.getActionCommand()) {
                    // 設置Metal風格
                    case "Metal風格":
                        UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
                        break;
                    // 設置Nimbus風格
                    case "Nimbus風格":
                        UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
                        break;
                    // 設置Windows風格
                    case "Windows風格":
                        UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
                        break;
                    // 設置Windows經典風格
                    case "Windows經典風格":
                        UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel");
                        break;
                    // 設置Motif風格
                    case "Motif風格":
                        UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
                        break;
                }
            } catch (IllegalAccessException ex) {
                ex.printStackTrace();
            } catch (InstantiationException ex) {
                ex.printStackTrace();
            } catch (UnsupportedLookAndFeelException ex) {
                ex.printStackTrace();
            } catch (ClassNotFoundException ex) {
                ex.printStackTrace();
            } finally {
                //更新各個組件的風格,jframe.getContentPane()就是獲取frame的各個組件
                SwingUtilities.updateComponentTreeUI(jFrame.getContentPane());
                SwingUtilities.updateComponentTreeUI(jMenuBar);
                SwingUtilities.updateComponentTreeUI(popupMenu);
            }
        };
        //右鍵菜單綁定監聽器
        metalItem.addActionListener(flavorListener);
        nimbusItem.addActionListener(flavorListener);
        windowsItem.addActionListener(flavorListener);
        classicItem.addActionListener(flavorListener);
        motifItem.addActionListener(flavorListener);
        //文本框設置右鍵菜單
        jTextArea.setComponentPopupMenu(popupMenu);

        //關閉窗口自動退出程序
        jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        jFrame.pack();
        jFrame.setLocation(400,300);
        jFrame.setVisible(true);
    }
}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM