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 hasau@163.com
* @TIME 2012-5-9 上午07:57:26
*/
/*
* Swing 测试
* */
public class SwingComponent {
JFrame f = new JFrame("Swing 测试");
// 定义一个按钮,为为之指定图标
Icon okIcon = new ImageIcon("image/selected.jpg");
JButton ok = new JButton("确认", okIcon);
// 定义一个单选按钮,默认选中
JRadioButton male = new JRadioButton("男", true);
JRadioButton female = new JRadioButton("女", true);
// 定义一个ButtonGroup,用于将上边两个单选按钮设置为一组
ButtonGroup bg = new ButtonGroup();
// 定义一个复选框,初始不选中
JCheckBox married = new JCheckBox("是否已婚", false);
String[] colors = { "红色", "绿色", "蓝色" };
// 定义一个下拉框
JComboBox colorChooser = new JComboBox(colors);
// 定义一个列表选择框
JList colorList = new JList(colors);
// 定义一个多行文本域
JTextArea ta = new JTextArea(8, 20);
// 定义一个单行文本域
JTextField name = new JTextField(40);
JMenuBar mb = new JMenuBar();
JMenu file = new JMenu("文件");
JMenu edit = new JMenu("编辑");
// 创建菜单项
JMenuItem newItem = new JMenuItem("新建");
JMenuItem saveItem = new JMenuItem("保存");
JMenuItem exitItem = new JMenuItem("退出");
JCheckBoxMenuItem autoItem = new JCheckBoxMenuItem("自动换行");
JMenuItem copyItem = new JMenuItem("复制");
JMenuItem pasteItem = new JMenuItem("粘贴");
JMenu format = new JMenu("格式");
JMenuItem commenItem = new JMenuItem("注释");
JMenuItem cancelItem = new JMenuItem("取消注释");
// 定义一个右键菜单设置程序风格
JPopupMenu pop = new JPopupMenu();
// 用于组合三个风格菜单项的ButtonGroup
ButtonGroup flavorGroup = new ButtonGroup();
// 创建三个单选按钮用于设置程序风格
JRadioButton metaItem = new JRadioButton("Metal风格", true);
JRadioButton windowItem = new JRadioButton("window风格", true);
JRadioButton motifItem = new JRadioButton("motif风格", true);
// --------------------初始化界面的init方法-----------------
public void init() {
// 创建一个装载文本框,按钮的JPanel
JPanel buttom = new JPanel();
buttom.add(name);
buttom.add(ok);
f.add(buttom, BorderLayout.SOUTH);
// 创建一个装载下拉框,三个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);
// 创建一个垂直排列的组建Box,装载多行文本域Jpanel
Box topLeft = Box.createVerticalBox();
JScrollPane jsp = new JScrollPane(ta);
topLeft.add(jsp);
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(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ta.append("单击了" + e.getActionCommand() + "\n");
}
});
// 为file菜单添加菜单项
file.add(newItem);
file.add(saveItem);
file.add(exitItem);
// 为编辑菜单添加菜单项
edit.add(autoItem);
// 添加分割线
edit.addSeparator();
edit.add(copyItem);
edit.add(pasteItem);
// 为commentItem添加提示信息
commenItem.setToolTipText("将程序代码注释起来");
// 为format菜单添加菜单项
format.add(commenItem);
format.add(cancelItem);
// 将format菜单组合到edit中,从而形成二级菜单效果
edit.add(format);
// 将file,edit菜单添加到mb菜单条中
mb.add(file);
mb.add(edit);
// 为窗口设置菜单条
f.setJMenuBar(mb);
// ---------------------组合右键菜单,并安装右键菜单
flavorGroup.add(motifItem);
flavorGroup.add(metaItem);
flavorGroup.add(windowItem);
pop.add(motifItem);
pop.add(metaItem);
pop.add(windowItem);
// 为三个菜单创建事件监听器
ActionListener flavorListeren = new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
if (e.getActionCommand().equals("Metal风格")) {
changeFlavor(1);
} else if (e.getActionCommand().equals("window风格")) {
changeFlavor(2);
} else if (e.getActionCommand().equals("motif风格")) {
changeFlavor(3);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
};
// 为三个菜单添加事件监听器
metaItem.addActionListener(flavorListeren);
windowItem.addActionListener(flavorListeren);
motifItem.addActionListener(flavorListeren);
// 调用该方法即可设置右键菜单,无须使用事件机制
ta.setComponentPopupMenu(pop);
// 设置关闭窗口时退出程序
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setVisible(true);
}
// 定义一个方法,用于改变界面风格
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窗口内顶级容器以及内部所有组建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) {
//设置Swing窗口使用的风格
//JFrame.setDefaultLookAndFeelDecorated(true);
new SwingComponent().init();
}
}
联系客服