- 按钮控件
- 1. JButton
- 它可以带图标
- 示例:
- JButton btn=new JButton("print",new ImageIcon("7.icon"));
- btn.setToolTipText("打印"); //提示文字
- 也可以设置文字和图标的放置方法:
- btn.setHorizontalTextPosition(SwingConstants.CENTER) 水平方向,文字居中
- btn.setVerticalTextPosition(SwingConstants.BOTTOM ) 垂直方向 文字在下面
- 2. JCheckBox
- 复选框
- 3. JRadioButton
- 单选按钮 一般当创建对个单选按钮时,应该再创建应该ButtonGroup对象,利用这个对象将多个单选按钮归为一组
- 示例:
- ButtonGroup group=new ButtonGroup();
- JRadioButton ec=new JRadioButton("ec");
- JRadioButton ac=new JRadioButton("ac");
- group.add(ec);
- group.add(ac);
- panel.add(ec);
- panel.add(ac);
- 4. JToggleButton
- 是一种具有两种状态的按钮
- 示例:
- JToggleButton bt1=new JToggleButton("on/off");
- JToggleButton bt2=new JToggleButton("running",new ImageIcon("7.icon"),true);
- panel.add(bt1);
- panel.add(bt2);
- 示例:
- import java.awt.*;
- import javax.swing.*;
- import java.awt.event.*;
- public class jjtt extends JFrame implements ActionListener{
- private JTextArea textArea;
- JToolBar toolBar;
- JButton button[]=new JButton[4];
- public jjtt(){
- setSize(345,200);
- toolBar=new JToolBar("工具栏",JToolBar.HORIZONTAL);
- createToolBarButton();
- Panel panel=new Panel();
- textArea=new JTextArea(2,26);
- JScrollPane scrollPane=new JScrollPane(textArea);
- panel.add(scrollPane);
- createOtherButton(panel);
- JPanel contentPanel=new JPanel();
- contentPanel.setLayout(new BorderLayout());
- contentPanel.add(toolBar,BorderLayout.NORTH);
- contentPanel.add(panel,BorderLayout.CENTER);
- add(contentPanel);
- }
- public void createOtherButton(Panel panel){
- JCheckBox cb1=new JCheckBox("计算机");
- JCheckBox cb3=new JCheckBox("电影",true);
- panel.add(cb1);
- panel.add(cb3);
- ButtonGroup group=new ButtonGroup();
- JRadioButton ec=new JRadioButton("电子商务");
- JRadioButton mis=new JRadioButton("管理信息系统",true);
- group.add(ec);group.add(mis);
- panel.add(ec);panel.add(mis);
- JToggleButton tb1=new JToggleButton("开关",true);
- JToggleButton tb2=new JToggleButton("正在运行...",new ImageIcon("7.icon"),true);
- panel.add(tb1);
- panel.add(tb2);
- }
- public void createToolBarButton(){
- String title[]={"费用","文档","电量","退出"};
- for(int i=0;i<4;i++){
- button[i]=new JButton(title[i]);
- button[i].addActionListener(this);
- toolBar.add(button[i]);
- toolBar.addSeparator();
- button[i].setName(title[i]);
- button[i].setBorder(null);
- }
- }
- public void actionPerformed(ActionEvent e){
- for(int i=0;i<4;i++)
- if(e.getSource()==button[i]){
- textArea.setText("你单击了【"+button[i].getName()+"】工具栏图标!");
- break;
- }
- }
- public static void main(String args[]){
- new jjtt().setVisible(true);
- }
- }
- 滚动条JScrollBar 和滑块 JSlider
- 1. JScrollBar
- 其有三个构造方法:
- JScrollBar() 具有应该垂直的滚动条
- JScrollBar(int orientation) 具有特定的方向 可以是 JScrollBar.HORIZONTAL JScrollBar.VERTICAL
- JScrollBar(int orientation,int value,int extent ,int min,int max) 方向 初始值 跨度 最小 最大
- 示例 :
- JScrollBar scrollBar=new JScrollBar(JScrollBar.HORIZONTAL,50,10,0,100);
- 可以给滚动条添加事件处理: 使用addAdjustmentListener()方法
- scrollBar.addAdjustmentListener(){public void adjustmentValueChanged(AdjustmentEvent e){}}
- 2. JSlider
- 它是用来选择某一个范围内通过移动滑块来选择数值的控件,其构造方法如下:
- JSlider() 创建一个0~100 初始值是50 的水平滑块
- JSlider(int orientation) 有方向 可以是 JSlider.HORIZONTAL JSlider.VERTICAL
- JSlider(int min,int max)
- JSlider(int min,int max,int value)
- JSlider(int orientation,int min,int max,int value)
- 示例:
- JSlider slider1=new JSlider(JSlider.HORIZONTAL,0,100,0);
- 如果希望拖动滑块的时候做出相应的处理,需要添加addChangeListener() 监听器
- 示例:
- import javax.swing.*;
- import java.awt.*;
- import java.awt.event.*;
- public class jjtt extends JFrame{
- public jjtt(){
- JPanel panel=new JPanel();
- panel.setLayout(null);
- final JTextField scrollBarValue=new JTextField(10);
- scrollBarValue.setBounds(310,20,70,20);
- JScrollBar scrollBar=new JScrollBar(JScrollBar.HORIZONTAL,50,10,0,100);
- scrollBar.setBounds(10,20,300,20);
- scrollBarValue.setText("当前值"+scrollBar.getValue());
- scrollBar.addAdjustmentListener(new AdjustmentListener(){
- public void adjustmentValueChanged(AdjustmentEvent e){
- scrollBarValue.setText("当前值"+e.getValue());
- }
- });
- panel.add(scrollBar);
- panel.add(scrollBarValue);
- final JTextField sliderValue=new JTextField(10);
- sliderValue.setBounds(310,60,70,20);
- JSlider slider=new JSlider(JSlider.HORIZONTAL,0,100,0);
- slider.setMajorTickSpacing(10); //设置主刻度标记间隔
- slider.setMinorTickSpacing(5); //设置次可读标记间隔
- slider.setPaintTicks(true); //在滑块上绘制可读标记
- slider.setPaintLabels(true); //在滑块上绘制标签
- sliderValue.setText("当前值"+slider.getValue());
- slider.addChangeListener(new ChangeListener(){
- public void stateChanged(ChangeEvent e){
- sliderValue.setText("当前值"+((JSlider) e.getSource()).getValue());
- }
- });
- slider.setBounds(10,60,300,50);
- panel.add(slider);
- panel.add(sliderValue);
- add(panel);
- }
- public static void main(String args[]){
- new jjtt().setVisible(true);
- }
- }
- JComboBox 和JList控件
- JComboBox表示下拉组合框,要定义下拉组合框,可以先定义一个包含列表项的数组
- String city[]={"","",""};
- 然后可以利用该数组创建JComboBox对象:
- JComboBox cities=new JComboBox(city);
- cities.addItem(""); //新增一个列表项
- 实际中我们往往希望在改变组合框的选择时,进行某个处理,这需要添加监听器:
- cities.addActionListener(new ActionListener(){
- public void actionPerformed(ActionEvent e){}
- })
- Jlist
- 它运行用户选择一个或多个列表项,它的列表项是一次显示,而JComboBox的是点击下拉箭头时才显示全部,其创建方法为:
- JList cities=new JList(city);
- 选项模式
- 此模式说明用户以怎样的方式选择列表框中的项,通过setSelectionMode(int secletionMode) 设定secletionMode可以是 ListSelectionModel.SINGLE_SELECTION一次只能选择一项
- ListSelectionModel.SINGLE_INTERVAL_SELECTION 一次只能选择一个连续间隔列表项 ListSelectionModel.MULTIPLE_INTERVAL_SELECTION 可以选择多个列表项
- 布局方向
- 通过setLayoutOrientation(int orientation) 可以设置列表的布局方向, 可以是 JList.VERTICAL JList.HORIZONTAL_WRAP 水平布局 自动折行
- JList.VERTICAL_WRAP 垂直布局 自动折行
- 可见列表行数
- 通过setVisibleRowCount(int visibleRow) 进行设置, 如果设为 -1 则JList在给定的显示区域内尽可能多的显示列表项
- 在实际使用JList时 往往将其嵌入滚动面板中:
- 示例:
- JList cities=new JList(city);
- JScrollPane box=new JScrollPane(cities);
- 如果希望在选择时进行处理,需要添加监听器 addListSelectionListener() 与JComboBox有区别:
- cities.addListSelectionListener(new ListSelectionListener(){public void valueChanged(ListSelectionEvent e){}})
- 示例:
- import javax.swing.*;
- import java.awt.*;
- import java.awt.event.*;
- import javax.swing.event.*;
- public class jjtt extends JPanel implements ActionListener,ListSelectionListener{
- private JTextField text1,text2,text3;
- private JComboBox combo1,combo2;
- public jjtt(LayoutManager layout){
- super(layout);
- String city1[]={"湖北武汉","浙江杭州","江苏南京","广州广东","山东济南"};
- combo1=createcombox(city1);
- add(combo1);
- text1=new JTextField(10);
- add(text1);
- add(createList(city1));
- text2=new JTextField(10);
- add(text2);
- String course[]={"电子商务","战略管理","语言","操作系统","数据库"};
- combo2=createcombox(course);
- add(combo2);
- text3=new JTextField(10);
- add(text3);
- }
- private JComboBox createcombox(String city[]){
- JComboBox cityComboBox=new JComboBox(city);
- cityComboBox.setSelectedIndex(1);
- cityComboBox.addActionListener(this);
- return cityComboBox;
- }
- private JScrollPane createList(String city[]){
- JList cityList=new JList(city);
- cityList.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
- cityList.setLayoutOrientation(JList.HORIZONTAL_WRAP);
- cityList.setVisibleRowCount(-1);
- cityList.addListSelectionListener(this);
- JScrollPane sp=new JScrollPane(cityList);
- sp.setPreferredSize(new Dimension(150,80));
- return sp;
- }
- public void actionPerformed(ActionEvent e){
- JComboBox cb=(JComboBox)e.getSource();
- if(cb==combo1){
- text1.setText((String) cb.getSelectedItem());
- }
- if(cb==combo2){
- text3.setText((String) cb.getSelectedItem());
- }
- }
- public void valueChanged(ListSelectionEvent e){
- text2.setText((String)((JList)e.getSource()).getSelectedValue());
- }
- public static void main(String argd[]){
- JFrame frame=new JFrame();
- frame.setSize(300,200);
- frame.setContentPane(new jjtt(new FlowLayout()));
- frame.setVisible(true);
- }
- }
- 菜单控件
- 1.窗口菜单
- swing的菜单是有JMenuBar JMenu JMenuItem 或者JCheckBoxMenuItem JRadioButtonMenuItem 集成的
- 其允许设置一个菜单图标
- 示例:
- JMenuBar mb=new JMenuBar();
- JMenu baseData=new JMenu("基础数据");
- JMenuItem baseParam=new JMenuItem("基础参数");
- baseData.add(baseParma);
- mb.add(baseData);
- setMenuBar(mb);
- 2.弹出式菜单
- JPopupMenu类用来实现弹出式菜单
- 示例:
- JPopupMenu popup=new JPopupMenu();
- JMenuItem exit=new JMenuItem("退出");
- popup.add(exit);
- 示例:
- import java.awt.*;
- import java.awt.event.*;
- import javax.swing.*;
- import javax.swing.event.*;
- class jjtt extends JFrame implements ActionListener{
- private String COMMAND="exit";
- public jjtt(){
- setSize(400,600);
- setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- final JPanel panel=new JPanel();
- final JPopupMenu popup=new JPopupMenu();
- JMenuItem open=new JMenuItem("open");
- popup.add(open);
- open.addActionListener(this);
- open.setActionCommand("open");
- JMenu save=new JMenu("save");
- popup.add(save);
- JMenuItem exit=new JMenuItem("exit");
- popup.add(exit);
- exit.setActionCommand(COMMAND);
- exit.addActionListener(this);
- addMouseListener(new MouseAdapter(){
- public void mouseReleased(final MouseEvent e){
- if(e.isPopupTrigger()){
- popup.show(e.getComponent(),e.getX(),e.getY());
- }
- }
- });
- }
- public void actionPerformed(final ActionEvent e){
- if(e.getActionCommand().equals("open")){
- JFileChooser jfc=new JFileChooser();
- jfc.showDialog(this,"chooser");
- }
- if(e.getActionCommand().equals(COMMAND)){
- System.exit(0);
- }
- }
- public static void main(String arge[]){
- new jjtt().setVisible(true);
- }
- }
- 进度条
- JProgressBar
- 有四种方法创建进度条:
- JProgressBar pro=new JProgressBar(); 不带进度字符串的水平进度条
- JProgressBar pro=new JProgressBar(SwingConstants.VERTICAL) 垂直
- JProgressBar pro=new JProgressBar(0,100) 最小 最大值水平
- JProgressBar pro=new JProgressBar(SwingConstants.HORIZONCAL,0,100) 最小 最大值水平
- 其提供了一些方法来设置进度条:
- void setIndeterminate(boolean newValue) 设置进度条处于确定还是不确定模式 true 表示不确定 false 表示确定 默认为确定
- void setString(String s) 设置进度条显示的文字信息
- void setStringPainted(boolean b) 进度条是否允许出现文字信息
- void setValue(int n) 将进度条的当前值设置为n
- 确定模式 指我们可以事先精确估计完成任务的进度
- 不确定模式 例如我们从网上下载电影 不确定下载时间 ,对于不确定的状态,我们需要告知任务完成并设置成默认状态 示例:
- pro.setIndeterminate(false); pro.setString("完成");
- ProgressMonitor
- 其以弹出对话框的形式显示任务进度 其构造方法如下:
- ProgressMonitor(Component parentCom,Object message,String note,int min,int max)
- 其主要方法为:
- void setProgress(int nv) 设置任务的当前进度
- void setNote(String nite) 设置当前进度的提示信息
- boolean isCanceled() 判断用户是否单击了对话框中的按钮
- 一般我们将其用一个单独的线程
- import java.awt.*;
- import java.awt.event.*;
- import javax.swing.*;
- import javax.swing.event.*;
- class jjtt extends JFrame implements ActionListener{
- private String COMMAND="exit";
- public jjtt(){
- setSize(400,600);
- setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- final JPanel panel=new JPanel();
- final JProgressBar jpb=new JProgressBar();
- jpb.setIndeterminate(true);
- jpb.setString("going");
- new Thread(new Runnable(){
- public void run(){
- for(int i=0;i<=100;i++){
- try{
- jpb.setValue(i);
- Thread.sleep(100);
- }catch(Exception e){}
- }
- }
- }).start();
- panel.add(jpb);
- add(panel);
- }
- public void actionPerformed(final ActionEvent e){
- }
- public static void main(String arge[]){
- new jjtt().setVisible(true);
- }
- }
- SwingWorker
- 让进度条在后台处理时比较合适的。SwingWorker抽象类,以便专用线程执行长时间任务,SwingWorker与JProgressBar JProgressMonitor配合使用
- 我们一般继承,然后 覆盖相关的方法:
- public class sw extends SwingWorker{
- protected Object doInBackground() throws Exception{} 在后台线程中执行任务,我们可以将需要长时间执行的任务放在该方法内
- protected void done(){} 任务完成,可以在此方法内提示用户任务完成
- }
- 其比较重要的方法如下:
- boolean cancel(boolean mayInterruootIfRunning) 取消任务的执行
- void execute() 在worker 线程上执行任务
- protected void setProgress(int progress) 设置进度条指示属性
- boolean isCanceled() 任务完成前取消返回true
- boolean isDone() 正常终止 出现异常 或者取消而完成任务返回true
- 树JTree
- 其常用的构造方法:
- JTree()
- JTree(Object[] value) 指定数组value的每个元素作为子节点
- JTree(TreeModel newModel) 使用指定的表格模型创建树
- JTree(TreeNode root) root作为根节点
- JTree(TreeNode root,boolean ask ) ask表示叶节点是否允许有子节点
- JTree(Vector<?>value) 指定Vector的每个元素作为子节点
- TreeNode是一个接口类, 我们可以通过 DefaultMutableTreeNode类 用以表示属性结构中的通用类 其构造方法如下:
- DefaultMutableTreeNode() 允许有子节点
- DefaultMutableTreeNode(Object userObject) 具有指定标签的 节点
- DefaultMutableTreeNode(Object userObject,boolean allowChildNode)
- 示例:
- DefaultMutableTreeNode root=new DefaultMutableTreeNode("root");
- DefaultMutableTreeNode r1=new DefaultMutableTreeNode("r1");
- root.add(r1);
- 我们可以通过DefaultMutableTreeNode来构建树,不过通过树模型TreeModel来创建树会带来方便,TreeModel是一个接口类 但是我们可以实现TreeModel接口的
- DefaultTreeModel类 其构造方法如下:
- DefaultTreeModel(TreeNode root) 创建其中然后节点都 可以有子节点的树,root为数的根节点
- DefaultTreeModel(TreeNode root,boolean allowchild) 是否允许有子节点
- 示例: DefaultTreeModel root=new DefaultTreeModel(root);