1.图片查看器 ImageViewer
2.复选框 MulitCombobox
3.MulitPopup
4.Swing 控件集合
5.JOptionPane 提示框大全
6.JToolBar java工具条
图片查看器 ImageViewer
import java.awt.Dimension; import java.awt.Image; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.File; import java.util.ArrayList; import javax.swing.BorderFactory; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JScrollPane; import javax.swing.filechooser.FileFilter; import javax.swing.filechooser.FileView; public class ImageViewer { final int PREVIEW_SIZE = 100; JFrame jf = new JFrame("简单图片查看器"); JMenuBar menuBar = new JMenuBar(); //该label用于显示图片 JLabel label = new JLabel(); //以当前路径创建文件选择器 JFileChooser chooser = new JFileChooser("."); JLabel accessory = new JLabel(); ExtensionFileFilter filter = new ExtensionFileFilter(); public void init() { //-------------------下面开始初始化JFileChooser的相关属性----------------- // 创建一个FileFilter filter.addExtension("jpg"); filter.addExtension("jpeg"); filter.addExtension("gif"); filter.addExtension("png"); filter.setDescription("图片文件(*.jpg,*.jpeg,*.gif,*.png)"); chooser.addChoosableFileFilter(filter); //禁止“文件类型”下拉列表中显示“所有文件”选项。 chooser.setAcceptAllFileFilterUsed(false); //为文件选择器指定自定义的FileView对象 chooser.setFileView(new FileIconView(filter)); //为文件选择器指定一个预览图片的附件组件 chooser.setAccessory(accessory); //设置预览图片组件的大小和边框 accessory.setPreferredSize(new Dimension(PREVIEW_SIZE, PREVIEW_SIZE)); accessory.setBorder(BorderFactory.createEtchedBorder()); //用于检测被选择文件的改变事件 chooser.addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent event) { //JFileChooser的被选文件已经发生了改变 if (event.getPropertyName() == JFileChooser.SELECTED_FILE_CHANGED_PROPERTY) { //获取用户选择的新文件 File f = (File) event.getNewValue(); if (f == null) { accessory.setIcon(null); return; } //将所文件读入ImageIcon对象中 ImageIcon icon = new ImageIcon(f.getPath()); //如果图像太大,则缩小它 if(icon.getIconWidth() > PREVIEW_SIZE) { icon = new ImageIcon(icon.getImage() .getScaledInstance(PREVIEW_SIZE, -1, Image.SCALE_DEFAULT)); } //改变accessory Label的图标 accessory.setIcon(icon); } } }); //----------下面代码开始为该窗口安装菜单------------ JMenu menu = new JMenu("文件"); menuBar.add(menu); JMenuItem openItem = new JMenuItem("打开"); menu.add(openItem); //单击openItem菜单项显示“打开文件”的对话框 openItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { //设置文件对话框的当前路径 //chooser.setCurrentDirectory(new File(".")); //显示文件对话框 int result = chooser.showDialog(jf , "打开图片文件"); //如果用户选择了APPROVE(赞同)按钮,即打开,保存及其等效按钮 if(result == JFileChooser.APPROVE_OPTION) { String name = chooser.getSelectedFile().getPath(); //显示指定图片 label.setIcon(new ImageIcon(name)); } } }); JMenuItem exitItem = new JMenuItem("退出"); menu.add(exitItem); exitItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { System.exit(0); } }); jf.setJMenuBar(menuBar); //添加用于显示图片的JLabel组件。 jf.add(new JScrollPane(label)); jf.setSize(500, 400); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setVisible(true); } public static void main(String[] args) { new ImageViewer().init(); } } //创建FileFilter的子类,用以实现文件过滤功能 class ExtensionFileFilter extends FileFilter { private String description = ""; private ArrayList<String> extensions = new ArrayList<String>(); //自定义方法,用于添加文件扩展名 public void addExtension(String extension) { if (!extension.startsWith(".")) { extension = "." + extension; extensions.add(extension.toLowerCase()); } } //用于设置该文件过滤器的描述文本 public void setDescription(String aDescription) { description = aDescription; } //继承FileFilter类必须实现的抽象方法,返回该文件过滤器的描述文本 public String getDescription() { return description; } //继承FileFilter类必须实现的抽象方法,判断该文件过滤器是否接受该文件 public boolean accept(File f) { //如果该文件是路径,接受该文件 if (f.isDirectory()) return true; //将文件名转为小写(全部转为小写后比较,用于忽略文件名大小写) String name = f.getName().toLowerCase(); //遍历所有可接受的扩展名,如果扩展名相同,该文件就可接受。 for (String extension : extensions) { if (name.endsWith(extension)) { return true; } } return false; } } //自定义一个FileView类,用于为指定类型的指定图标 class FileIconView extends FileView { private FileFilter filter; public FileIconView(FileFilter filter) { this.filter = filter; } //如果文件不是目录,并且不是 public Icon getIcon(File f) { if (!f.isDirectory() && filter.accept(f)) { return new ImageIcon("ico/pict.png"); } else if (f.isDirectory()) { //获取所有根路径 File[] fList = File.listRoots(); for (File tmp : fList) { //如果该路径是根路径 if (tmp.equals(f)) { return new ImageIcon("ico/dsk.png"); } } return new ImageIcon("ico/folder.png"); } //使用默认图标 else { return null; } } }
3. 复选框 MulitCombobox
import java.awt.Color; import java.awt.Component; import java.awt.Container; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Graphics; import java.awt.Insets; import java.awt.LayoutManager; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.ArrayList; import java.util.List; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JTextField; import javax.swing.UIManager; import javax.swing.plaf.basic.BasicArrowButton; /** * hi , this is my first ui component. my ui component "hello world"!! * * @author bugu * */ public class MulitCombobox extends JComponent { private Object[] values; private Object[] defaultValues; private List<ActionListener> listeners = new ArrayList<ActionListener>(); private MulitPopup popup; private JTextField editor; protected JButton arrowButton; private String valueSperator; private static final String DEFAULT_VALUE_SPERATOR = " "; public MulitCombobox(Object[] value, Object[] defaultValue){ this(value,defaultValue,DEFAULT_VALUE_SPERATOR); } public MulitCombobox(Object[] value, Object[] defaultValue , String valueSperator) { values = value; defaultValues = defaultValue; this.valueSperator = valueSperator; initComponent(); } private void initComponent() { //暂时使用该布局,后续自己写个布局 this.setLayout(new FlowLayout()); popup =new MulitPopup(values,defaultValues); popup.addActionListener(new PopupAction()); editor = new JTextField(); editor.setBackground(Color.WHITE); editor.setEditable(false); editor.setBorder(null); editor.addMouseListener(new EditorHandler()); arrowButton = createArrowButton(); arrowButton.addMouseListener(new EditorHandler()); add(editor); add(arrowButton); setText() ; } public Object[] getSelectedValues() { return popup.getSelectedValues(); } public void addActionListener(ActionListener listener) { if (!listeners.contains(listener)) listeners.add(listener); } public void removeActionListener(ActionListener listener) { if (listeners.contains(listener)) listeners.remove(listener); } protected void fireActionPerformed(ActionEvent e) { for (ActionListener l : listeners) { l.actionPerformed(e); } } private class PopupAction implements ActionListener{ @Override public void actionPerformed(ActionEvent e) { if(e.getActionCommand().equals(MulitPopup.CANCEL_EVENT)){ }else if(e.getActionCommand().equals(MulitPopup.COMMIT_EVENT)){ defaultValues = popup.getSelectedValues(); setText(); //把事件继续传递出去 fireActionPerformed(e); } togglePopup(); } } private void togglePopup(){ if(popup.isVisible()){ popup.setVisible(false); }else{ popup.setDefaultValue(defaultValues); popup.show(this, 0, getHeight()); } } private void setText() { StringBuilder builder = new StringBuilder(); for(Object dv : defaultValues){ builder.append(dv); builder.append(valueSperator); } editor.setText(builder.substring(0, builder.length() > 0 ? builder.length() -1 : 0).toString()); } private class EditorHandler implements MouseListener{ @Override public void mouseClicked(MouseEvent e) { togglePopup(); } @Override public void mousePressed(MouseEvent e) { } @Override public void mouseReleased(MouseEvent e) { } @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseExited(MouseEvent e) { } } public void paintComponent(Graphics g){ g.setColor(Color.white); g.fillRect(0,0,getWidth(),getHeight()); } /** * 摘自JDK * Creates an button which will be used as the control to show or hide * the popup portion of the combo box. * * @return a button which represents the popup control */ protected JButton createArrowButton() { JButton button = new BasicArrowButton(BasicArrowButton.SOUTH, UIManager.getColor("ComboBox.buttonBackground"), UIManager.getColor("ComboBox.buttonShadow"), UIManager.getColor("ComboBox.buttonDarkShadow"), UIManager.getColor("ComboBox.buttonHighlight")); button.setName("ComboBox.arrowButton"); return button; } private class MulitComboboxLayout implements LayoutManager{ @Override public void addLayoutComponent(String name, Component comp) { // TODO Auto-generated method stub } @Override public void removeLayoutComponent(Component comp) { // TODO Auto-generated method stub } @Override public Dimension preferredLayoutSize(Container parent) { return parent.getPreferredSize(); } @Override public Dimension minimumLayoutSize(Container parent) { return parent.getMinimumSize(); } @Override public void layoutContainer(Container parent) { int w=parent.getWidth(); int h=parent.getHeight(); Insets insets=parent.getInsets(); h=h-insets.top-insets.bottom; } } }
3.MulitPopup
import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.List; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JPanel; import javax.swing.JPopupMenu; /** * * @author bugu * */ public class MulitPopup extends JPopupMenu { private List<ActionListener> listeners = new ArrayList<ActionListener>(); private Object[] values; private Object[] defaultValues; private List<JCheckBox> checkBoxList = new ArrayList<JCheckBox>(); private JButton commitButton ; private JButton cancelButton; public static final String COMMIT_EVENT = "commit"; public static final String CANCEL_EVENT = "cancel"; public MulitPopup(Object[] value , Object[] defaultValue) { super(); values = value; defaultValues = defaultValue; initComponent(); } public void addActionListener(ActionListener listener) { if (!listeners.contains(listener)) listeners.add(listener); } public void removeActionListener(ActionListener listener) { if (listeners.contains(listener)) listeners.remove(listener); } private void initComponent() { JPanel checkboxPane = new JPanel(); JPanel buttonPane = new JPanel(); this.setLayout(new BorderLayout()); for(Object v : values){ JCheckBox temp = new JCheckBox(v.toString() , selected(v)); checkBoxList.add(temp); } checkboxPane.setLayout(new GridLayout(checkBoxList.size() , 1 ,3, 3)); for(JCheckBox box : checkBoxList){ checkboxPane.add(box); } commitButton = new JButton("ok"); commitButton.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { commit(); } }); cancelButton = new JButton("cancel"); cancelButton.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { cancel(); } }); buttonPane.add(commitButton); buttonPane.add(cancelButton); this.add(checkboxPane , BorderLayout.CENTER); this.add(buttonPane , BorderLayout.SOUTH); } private boolean selected(Object v) { for(Object dv : defaultValues){ if( dv .equals(v) ){ return true; } } return false; } protected void fireActionPerformed(ActionEvent e) { for (ActionListener l : listeners) { l.actionPerformed(e); } } public Object[] getSelectedValues(){ List<Object> selectedValues = new ArrayList<Object>(); for(int i = 0 ; i < checkBoxList.size() ; i++){ if(checkBoxList.get(i).isSelected()) selectedValues.add(values[i]); } return selectedValues.toArray(new Object[selectedValues.size()]); } public void setDefaultValue(Object[] defaultValue) { defaultValues = defaultValue; } public void commit(){ fireActionPerformed(new ActionEvent(this, 0, COMMIT_EVENT)); } public void cancel(){ fireActionPerformed(new ActionEvent(this, 0, CANCEL_EVENT)); } }
4.SwingComponent 控件集合
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.JRadioButtonMenuItem; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.KeyStroke; import javax.swing.SwingUtilities; import javax.swing.UIManager; 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 colorChooser = new JComboBox(colors); //定义一个列表选择框 JList colorList = new JList(colors); //定义一个8行、20列的多行文本域 JTextArea ta = new JTextArea(8, 20); //定义一个40列的单行文本域 JTextField name = new JTextField(40); 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(); //用于组合三个风格菜单项的ButtonGroup ButtonGroup flavorGroup = new ButtonGroup(); //创建三个单选框按钮,用于设定程序的外观风格 JRadioButtonMenuItem metalItem = new JRadioButtonMenuItem("Metal风格" , true); JRadioButtonMenuItem windowsItem = 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(new ActionListener() { public void actionPerformed(ActionEvent 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.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(windowsItem); flavorGroup.add(motifItem); pop.add(metalItem); pop.add(windowsItem); pop.add(motifItem); //为三个菜单创建事件监听器 ActionListener flavorListener = new ActionListener() { public void actionPerformed(ActionEvent e) { try { if (e.getActionCommand().equals("Metal风格")) { changeFlavor(1); } else if (e.getActionCommand().equals("Windows风格")) { changeFlavor(2); } else if (e.getActionCommand().equals("Motif风格")) { changeFlavor(3); } } catch (Exception ee) { ee.printStackTrace(); } } }; //为三个菜单添加事件监听器 metalItem.addActionListener(flavorListener); windowsItem.addActionListener(flavorListener); motifItem.addActionListener(flavorListener); //调用该方法即可设置右键菜单,无需使用事件机制 ta.setComponentPopupMenu(pop); //设置关闭窗口时,退出程序 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.pack(); f.setVisible(true); } //定义一个方法,用于改变界面风格 private void changeFlavor(int flavor)throws Exception { switch (flavor) { //设置Metal风格 case 1: UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel"); break; //设置Windows风格 case 2: UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); break; //设置Motif风格 case 3: UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel"); break; } //更新f窗口内顶级容器以及内部所有组件的UI SwingUtilities.updateComponentTreeUI(f.getContentPane()); //更新mb菜单条以及内部所有组件的UI SwingUtilities.updateComponentTreeUI(mb); //更新pop右键菜单以及内部所有组件的UI SwingUtilities.updateComponentTreeUI(pop); } public static void main(String[] args) { //设置Swing窗口使用Java风格 JFrame.setDefaultLookAndFeelDecorated(true); new SwingComponent().init(); } }
5.JOptionPane java 提示框
import java.awt.Component; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Date; import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.ButtonGroup; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.border.EtchedBorder; import javax.swing.border.TitledBorder; public class TestJOptionPane { JFrame jf = new JFrame("测试JOptionPane"); //分别定义6个面板用于定义对话框的几种选项 private ButtonPanel messagePanel; private ButtonPanel messageTypePanel; private ButtonPanel msgPanel; private ButtonPanel confirmPanel; private ButtonPanel optionsPanel; private ButtonPanel inputPanel; private String messageString = "消息区内容"; private Icon messageIcon = new ImageIcon("ico/heart.png"); private Object messageObject = new Date(); private Component messageComponent = new JButton("组件消息"); private JButton msgBn = new JButton("消息对话框"); private JButton confrimBn = new JButton("确认对话框"); private JButton inputBn = new JButton("输入对话框"); private JButton optionBn = new JButton("选项对话框"); public void init() { JPanel top = new JPanel(); // top.setBorder(new TitledBorder(new EtchedBorder(), "对话框的通用选项" , // TitledBorder.CENTER ,TitledBorder.TOP )); top.setLayout(new GridLayout(1 , 2)); //消息类型Panel,该Panel中的选项决定对话框的图标 messageTypePanel = new ButtonPanel("选择消息的类型", new String[]{"ERROR_MESSAGE", "INFORMATION_MESSAGE", "WARNING_MESSAGE", "QUESTION_MESSAGE", "PLAIN_MESSAGE" }); //消息内容类型的Panel,该Panel中的选项决定对话框的消息区的内容 messagePanel = new ButtonPanel("选择消息内容的类型", new String[]{"字符串消息", "图标消息", "组件消息", "普通对象消息" , "Object[]消息"}); top.add(messageTypePanel); top.add(messagePanel); JPanel bottom = new JPanel(); bottom.setBorder(new TitledBorder(new EtchedBorder(), "弹出不同的对话框" , TitledBorder.CENTER ,TitledBorder.TOP)); bottom.setLayout(new GridLayout(1 , 4)); //创建用于弹出消息对话框的Panel msgPanel = new ButtonPanel("消息对话框", null); msgBn.addActionListener(new ShowAction()); msgPanel.add(msgBn); //创建用于弹出确认对话框的Panel confirmPanel = new ButtonPanel("确认对话框", new String[]{"DEFAULT_OPTION", "YES_NO_OPTION", "YES_NO_CANCEL_OPTION", "OK_CANCEL_OPTION"}); confrimBn.addActionListener(new ShowAction()); confirmPanel.add(confrimBn); //创建用于弹出输入对话框的Panel inputPanel = new ButtonPanel("输入对话框", new String[]{"单行文本框","下拉列表选择框"}); inputBn.addActionListener(new ShowAction()); inputPanel.add(inputBn); //创建用于弹出选项对话框的Panel optionsPanel = new ButtonPanel("选项对话框", new String[]{"字符串选项", "图标选项", "对象选项"}); optionBn.addActionListener(new ShowAction()); optionsPanel.add(optionBn); bottom.add(msgPanel); bottom.add(confirmPanel); bottom.add(inputPanel); bottom.add(optionsPanel); Box box = new Box(BoxLayout.Y_AXIS); box.add(top); box.add(bottom); jf.add(box); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.pack(); jf.setVisible(true); } //根据用户选择返回选项类型 private int getOptionType() { if (confirmPanel.getSelection().equals("DEFAULT_OPTION")) return JOptionPane.DEFAULT_OPTION; else if (confirmPanel.getSelection().equals("YES_NO_OPTION")) return JOptionPane.YES_NO_OPTION; else if (confirmPanel.getSelection().equals("YES_NO_CANCEL_OPTION")) return JOptionPane.YES_NO_CANCEL_OPTION; else return JOptionPane.OK_CANCEL_OPTION; } //根据用户选择返回消息 private Object getMessage() { if (messagePanel.getSelection().equals("字符串消息")) return messageString; else if (messagePanel.getSelection().equals("图标消息")) return messageIcon; else if (messagePanel.getSelection().equals("组件消息")) return messageComponent; else if(messagePanel.getSelection().equals("普通对象消息")) return messageObject; else return new Object[]{messageString , messageIcon , messageObject , messageComponent}; } //根据用户选择返回消息类型(决定图标区的图标) private int getDialogType() { if (messageTypePanel.getSelection().equals("ERROR_MESSAGE")) return JOptionPane.ERROR_MESSAGE; else if (messageTypePanel.getSelection().equals("INFORMATION_MESSAGE")) return JOptionPane.INFORMATION_MESSAGE; else if (messageTypePanel.getSelection().equals("WARNING_MESSAGE")) return JOptionPane.WARNING_MESSAGE; else if(messageTypePanel.getSelection().equals("QUESTION_MESSAGE")) return JOptionPane.QUESTION_MESSAGE; else return JOptionPane.PLAIN_MESSAGE; } private Object[] getOptions() { if (optionsPanel.getSelection().equals("字符串选项")) return new String[]{"a" , "b" , "c" , "d"}; else if (optionsPanel.getSelection().equals("图标选项")) return new Icon[]{new ImageIcon("ico/1.gif") , new ImageIcon("ico/2.gif"), new ImageIcon("ico/3.gif"),new ImageIcon("ico/4.gif")}; else return new Object[]{new Date() ,new Date() , new Date()}; } //为各按钮定义事件监听器 private class ShowAction implements ActionListener { public void actionPerformed(ActionEvent event) { if (event.getActionCommand().equals("确认对话框")) { JOptionPane.showConfirmDialog(jf , getMessage(),"确认对话框", getOptionType(), getDialogType()); } else if (event.getActionCommand().equals("输入对话框")) { if (inputPanel.getSelection().equals("单行文本框")) { JOptionPane.showInputDialog(jf, getMessage(), "输入对话框", getDialogType()); } else { JOptionPane.showInputDialog(jf, getMessage(), "输入对话框", getDialogType(), null, new String[] {"轻量级J2EE企业应用实战", "Struts2权威指南"}, "Struts2权威指南"); } } else if (event.getActionCommand().equals("消息对话框")) { JOptionPane.showMessageDialog(jf,getMessage(),"消息对话框",getDialogType()); } else if (event.getActionCommand().equals("选项对话框")) { JOptionPane.showOptionDialog(jf , getMessage() , "选项对话框", getOptionType(), getDialogType(), null, getOptions(), "a"); } } } public static void main(String[] args) { new TestJOptionPane().init(); } } //定义一个JPanel类扩展类,该类的对象包含多个纵向排列的JRadioButton控件 //且Panel扩展类可以指定一个字符串作为TitledBorder class ButtonPanel extends JPanel { private ButtonGroup group; public ButtonPanel(String title, String[] options) { setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), title)); setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); group = new ButtonGroup(); for (int i = 0; options!= null && i < options.length; i++) { JRadioButton b = new JRadioButton(options[i]); b.setActionCommand(options[i]); add(b); group.add(b); b.setSelected(i == 0); } } //定义一个方法,用于返回用户选择的选项 public String getSelection() { return group.getSelection().getActionCommand(); } }
6.JToolBar java工具条
import java.awt.BorderLayout; import java.awt.Insets; import java.awt.Toolkit; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.StringSelection; import java.awt.event.ActionEvent; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JToolBar; public class TestJToolBar { JFrame jf = new JFrame("测试工具条"); JTextArea jta = new JTextArea(6, 35); JToolBar jtb = new JToolBar(); JMenuBar jmb = new JMenuBar(); JMenu edit = new JMenu("编辑"); Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); //创建"粘贴"Action,该Action用于创建菜单项、工具按钮和普通按钮 Action pasteAction = new AbstractAction("粘贴", new ImageIcon("ico/paste.png")) { public void actionPerformed(ActionEvent e) { //如果剪贴板中包含stringFlavor内容 if (clipboard.isDataFlavorAvailable(DataFlavor.stringFlavor)) { try { //取出剪贴板中stringFlavor内容 String content = (String)clipboard.getData(DataFlavor.stringFlavor); //将选中内容替换成剪贴板中的内容 jta.replaceRange(content , jta.getSelectionStart() , jta.getSelectionEnd()); } catch (Exception ee) { ee.printStackTrace(); } } } }; //创建"复制"Action Action copyAction = new AbstractAction("复制", new ImageIcon("ico/copy.png")) { public void actionPerformed(ActionEvent e) { StringSelection contents = new StringSelection(jta.getSelectedText()); //将StringSelection对象放入剪贴板 clipboard.setContents(contents, null); //如果剪贴板中包含stringFlavor内容 if (clipboard.isDataFlavorAvailable(DataFlavor.stringFlavor)) { //将pasteAction激活 pasteAction.setEnabled(true); } } }; public void init() { //pasteAction默认处于不激活状态 pasteAction.setEnabled(false); jf.add(new JScrollPane(jta)); //以Action创建按钮,并将该按钮添加到Panel中 JButton copyBn = new JButton(copyAction); JButton pasteBn = new JButton(pasteAction); JPanel jp = new JPanel(); jp.add(copyBn); jp.add(pasteBn); jf.add(jp , BorderLayout.SOUTH); //向工具条中添加Action对象,该对象将会转换成工具按钮 jtb.add(copyAction); jtb.addSeparator(); jtb.add(pasteAction); //向菜单中添加Action对象,该对象将会转换成菜单项 edit.add(copyAction); edit.add(pasteAction); //将edit菜单添加到菜单条中 jmb.add(edit); jf.setJMenuBar(jmb); //设置工具条和工具按钮之间的距离 jtb.setMargin(new Insets(20 ,10 , 5 , 30)); //向窗口中添加工具条 jf.add(jtb , BorderLayout.NORTH); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.pack(); jf.setVisible(true); } public static void main(String[] args) { new TestJToolBar().init(); } }