天天看點

AWT元件的Swing實作

import java.awt.BorderLayout;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;

import javax.swing.Box;
import javax.swing.ButtonGroup;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JRadioButton;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.KeyStroke;

public class SwingComponent {
    JFrame f=new JFrame("測試");
    //定義一個按鈕,并為之指定圖示
    Icon okIcon=new ImageIcon("ico/ok.png");
    JButton ok=new JButton("确認",okIcon);
   //定義一個單選按鈕,初始處于選中狀态
    JRadioButton male=new JRadioButton("男",true);
    //定義一個單選按鈕,初始處于沒有選中狀态
    JRadioButton female=new JRadioButton("女",false);
    //定義一個ButtonGroup,用于将上面兩個JRadioButton組合在一起
    ButtonGroup bg=new ButtonGroup();
    //定義一個複選框,初始處于沒有選中狀态
    JCheckBox married=new JCheckBox("是否已婚?",false);
    String[] colors=new String[]{"紅色","綠色","藍色"};
    //定義一個下拉選擇框
    JComboBox<String> colorChooser=new JComboBox<>(colors);
    //定義一個清單選擇框
    JList<String> colorList=new JList<>(colors);
    //定義一個8行、20列的多行文本域
    JTextArea ta=new JTextArea(,);
    //定義一個40列的單行文本域
    JTextField name=new JTextField();
    JMenuBar mb=new JMenuBar();
    JMenu file=new JMenu("檔案");
    JMenu edit=new JMenu("編輯");
    //建立“建立"菜單項,并為之指定圖示
    Icon newIcon=new ImageIcon("ico/new.png");
    JMenuItem  newItem=new JMenuItem("建立",newIcon);
    //建立“儲存"菜單項,并為之指定圖示
    Icon saveIcon=new ImageIcon("ico/save.png");
    JMenuItem saveItem=new JMenuItem("儲存",saveIcon);
    //建立"退出"菜單項,并為之指定圖示
    Icon exitIcon=new ImageIcon("ico/exit.png");
    JMenuItem exitItem=new JMenuItem("退出",exitIcon);
    JCheckBoxMenuItem autoWrap=new JCheckBoxMenuItem("自動換行");
    //建立“複制"菜單項,并為之指定圖示
    JMenuItem copyItem=new JMenuItem("複制",new ImageIcon("ico/copy.png"));
    //建立"粘貼"菜單項,并為之指定圖示
    JMenuItem pasteItem=new JMenuItem("粘貼",new ImageIcon("ico/paste.png"));
    JMenu format=new JMenu("格式");
    JMenuItem commentItem=new JMenuItem("注釋");
    JMenuItem cancelItem=new JMenuItem("取消注釋");
    //定義一個右鍵菜單用于設定程式風格
    JPopupMenu pop=new JPopupMenu();
    //用于組合3個風格菜單項的ButtonGroup
    ButtonGroup flavorGroup=new ButtonGroup();
    //建立5個單選按鈕,用于設定程式的外觀風格
    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風格");
    public void init(){
        //建立一個裝載了文本框、按鈕的JPanel
        JPanel bottom=new JPanel();
        bottom.add(name);
        bottom.add(ok);
        f.add(bottom,BorderLayout.SOUTH);
        //建立一個裝載了下拉選擇框、三個JCheckBox的JPanel
        JPanel checkPanel=new JPanel();
        checkPanel.add(colorChooser);
        bg.add(male);
        bg.add(female);
        checkPanel.add(male);
        checkPanel.add(female);
        checkPanel.add(married);
        //建立一個垂直排列元件的Box,盛裝多行文本域JPanel
        Box topLeft=Box.createVerticalBox();
        //使用JScrollPane作為普通元件的JViewPort
        JScrollPane taJsp=new JScrollPane(ta);
        topLeft.add(taJsp);
        topLeft.add(checkPanel);
        //建立一個水準排列元件的Box,盛裝topLeft、colorList
        Box top=Box.createHorizontalBox();
        top.add(topLeft);
        top.add(colorList);
        //将top Box容器添加到視窗的中間
        f.add(top);
        //--------------下面開始組合菜單,并為 菜單添加監聽器------------------
        //為newItem設定快捷鍵,設定快捷鍵時要使用大寫字母
        newItem.setAccelerator(KeyStroke.getKeyStroke('N',InputEvent.CTRL_MASK));
    /*  newItem.addActionListener(e -> ta.append("使用者單擊了”建立“菜單\n"));*/
        //為file菜單添加菜單項
        file.add(newItem);
        file.add(saveItem);
        file.add(exitItem);
        //為edit菜單添加菜單項
        edit.add(autoWrap);
        //使用addSeparator方法添加菜單分割線
        edit.addSeparator();
        edit.add(copyItem);
        edit.add(pasteItem);
        //為commentItem元件添加提示資訊
        commentItem.setToolTipText("将程式代碼注釋起來!");
        //為format菜單添加菜單項
        format.add(commentItem);
        format.add(cancelItem);
        //使用添加new JMenuItem("-")的方式不能添加菜單分隔符
        edit.add(new JMenuItem("-"));
        //将format菜單組合到edit菜單中,進而形成 二級菜單
        edit.add(format);
        //将file、edit菜單添加到mb菜單條中
        mb.add(file);
        mb.add(edit);
        //為f視窗設定 菜單條
        f.setJMenuBar(mb);
        //-------------------下面開始組合右鍵菜單,并安裝右鍵菜單----------------
        flavorGroup.add(metalItem);
        flavorGroup.add(nimbusItem);
        flavorGroup.add(windowsItem);
        flavorGroup.add(classicItem);
        flavorGroup.add(motifItem);
        pop.add(metalItem);
        pop.add(nimbusItem);
        pop.add(windowsItem);
        pop.add(classicItem);
        pop.add(motifItem);


        //為5個風格菜單建立事件監聽器
        /*ActionListener flavorListener= e -> {
            try{

            }catch(Exception ee){
                ee.printStackTrace();
            }
        }*/
        ta.setComponentPopupMenu(pop);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.pack();
        f.setVisible(true);
    }
    public static void main(String [] args){
        //設定Swing視窗使用Java風格
        //JFrame.setDefaultLookAndFeelDecorated(true);
        new SwingComponent().init();
    } 
}

           
AWT元件的Swing實作