package om.hasau.swing.test;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
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.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
/**
* T.java
* @author hasau
* @E_mail [email protected]
* @TIME 2012-5-9 上午07:57:26
*/
/*
* Swing 測(cè)試
* */
public class SwingComponent {
JFrame f = new JFrame("Swing 測(cè)試");
// 定義一個(gè)按鈕,,為為之指定圖標(biāo)
Icon okIcon = new ImageIcon("image/selected.jpg");
JButton ok = new JButton("確認(rèn)", okIcon);
// 定義一個(gè)單選按鈕,,默認(rèn)選中
JRadioButton male = new JRadioButton("男", true);
JRadioButton female = new JRadioButton("女", true);
// 定義一個(gè)ButtonGroup,用于將上邊兩個(gè)單選按鈕設(shè)置為一組
ButtonGroup bg = new ButtonGroup();
// 定義一個(gè)復(fù)選框,初始不選中
JCheckBox married = new JCheckBox("是否已婚", false);
String[] colors = { "紅色", "綠色", "藍(lán)色" };
// 定義一個(gè)下拉框
JComboBox colorChooser = new JComboBox(colors);
// 定義一個(gè)列表選擇框
JList colorList = new JList(colors);
// 定義一個(gè)多行文本域
JTextArea ta = new JTextArea(8, 20);
// 定義一個(gè)單行文本域
JTextField name = new JTextField(40);
JMenuBar mb = new JMenuBar();
JMenu file = new JMenu("文件");
JMenu edit = new JMenu("編輯");
// 創(chuàng)建菜單項(xiàng)
JMenuItem newItem = new JMenuItem("新建");
JMenuItem saveItem = new JMenuItem("保存");
JMenuItem exitItem = new JMenuItem("退出");
JCheckBoxMenuItem autoItem = new JCheckBoxMenuItem("自動(dòng)換行");
JMenuItem copyItem = new JMenuItem("復(fù)制");
JMenuItem pasteItem = new JMenuItem("粘貼");
JMenu format = new JMenu("格式");
JMenuItem commenItem = new JMenuItem("注釋");
JMenuItem cancelItem = new JMenuItem("取消注釋");
// 定義一個(gè)右鍵菜單設(shè)置程序風(fēng)格
JPopupMenu pop = new JPopupMenu();
// 用于組合三個(gè)風(fēng)格菜單項(xiàng)的ButtonGroup
ButtonGroup flavorGroup = new ButtonGroup();
// 創(chuàng)建三個(gè)單選按鈕用于設(shè)置程序風(fēng)格
JRadioButton metaItem = new JRadioButton("Metal風(fēng)格", true);
JRadioButton windowItem = new JRadioButton("window風(fēng)格", true);
JRadioButton motifItem = new JRadioButton("motif風(fēng)格", true);
// --------------------初始化界面的init方法-----------------
public void init() {
// 創(chuàng)建一個(gè)裝載文本框,,按鈕的JPanel
JPanel buttom = new JPanel();
buttom.add(name);
buttom.add(ok);
f.add(buttom, BorderLayout.SOUTH);
// 創(chuàng)建一個(gè)裝載下拉框,,三個(gè)JCheckBox的Jpanel
JPanel checkPanel = new JPanel();
checkPanel.add(colorChooser);
// 把性別單選按鈕添加到JButtonGroup里
bg.add(male);
bg.add(female);
checkPanel.add(male);
checkPanel.add(female);
checkPanel.add(married);
// 創(chuàng)建一個(gè)垂直排列的組建Box,裝載多行文本域Jpanel
Box topLeft = Box.createVerticalBox();
JScrollPane jsp = new JScrollPane(ta);
topLeft.add(jsp);
topLeft.add(checkPanel);
// 創(chuàng)建一個(gè)水平排列的Box,,裝載topLeft,colorList
Box top = Box.createHorizontalBox();
top.add(topLeft);
top.add(colorList);
// 將top Box容器添加到窗口
f.add(top);
// -------------------開始組合菜單,,并為菜單添加事件監(jiān)聽
// 為newItem設(shè)置快捷鍵,設(shè)置快捷鍵時(shí)要使用大寫字母
newItem.setAccelerator(KeyStroke
.getKeyStroke('N', InputEvent.CTRL_MASK));
newItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ta.append("單擊了" + e.getActionCommand() + "\n");
}
});
// 為file菜單添加菜單項(xiàng)
file.add(newItem);
file.add(saveItem);
file.add(exitItem);
// 為編輯菜單添加菜單項(xiàng)
edit.add(autoItem);
// 添加分割線
edit.addSeparator();
edit.add(copyItem);
edit.add(pasteItem);
// 為commentItem添加提示信息
commenItem.setToolTipText("將程序代碼注釋起來");
// 為format菜單添加菜單項(xiàng)
format.add(commenItem);
format.add(cancelItem);
// 將format菜單組合到edit中,,從而形成二級(jí)菜單效果
edit.add(format);
// 將file,,edit菜單添加到mb菜單條中
mb.add(file);
mb.add(edit);
// 為窗口設(shè)置菜單條
f.setJMenuBar(mb);
// ---------------------組合右鍵菜單,并安裝右鍵菜單
flavorGroup.add(motifItem);
flavorGroup.add(metaItem);
flavorGroup.add(windowItem);
pop.add(motifItem);
pop.add(metaItem);
pop.add(windowItem);
// 為三個(gè)菜單創(chuàng)建事件監(jiān)聽器
ActionListener flavorListeren = new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
if (e.getActionCommand().equals("Metal風(fēng)格")) {
changeFlavor(1);
} else if (e.getActionCommand().equals("window風(fēng)格")) {
changeFlavor(2);
} else if (e.getActionCommand().equals("motif風(fēng)格")) {
changeFlavor(3);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
};
// 為三個(gè)菜單添加事件監(jiān)聽器
metaItem.addActionListener(flavorListeren);
windowItem.addActionListener(flavorListeren);
motifItem.addActionListener(flavorListeren);
// 調(diào)用該方法即可設(shè)置右鍵菜單,,無須使用事件機(jī)制
ta.setComponentPopupMenu(pop);
// 設(shè)置關(guān)閉窗口時(shí)退出程序
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setVisible(true);
}
// 定義一個(gè)方法,,用于改變界面風(fēng)格
private void changeFlavor(int flavor) throws Exception {
switch (flavor) {
case 1:
UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
break;
case 2:
UIManager
.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
break;
case 3:
UIManager
.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
break;
}
//更新f窗口內(nèi)頂級(jí)容器以及內(nèi)部所有組建UI
SwingUtilities.updateComponentTreeUI(f.getContentPane());
//更新mb菜單條以及所有組建
SwingUtilities.updateComponentTreeUI(mb);
//更新pop右鍵菜單以及所有組建
SwingUtilities.updateComponentTreeUI(pop);
}
public void ttt(){
ActionListener add = new ActionListener() {
public void actionPerformed(ActionEvent e) {
e.getActionCommand().equals("");
}
};
}
//-------------------------程序入口-------------------
public static void main(String[] args) {
//設(shè)置Swing窗口使用的風(fēng)格
//JFrame.setDefaultLookAndFeelDecorated(true);
new SwingComponent().init();
}
}