黑马程序员_Java图形界面(二)

来源:互联网 发布:数据库如何到数据仓库 编辑:程序博客网 时间:2024/05/29 17:02

------- android培训java培训 、期待与您交流! ----------

单选按钮就是在给出的对个显示信息中指定选择一个,在Swing中可以使用JRadioButton完成一组单选钮的操作。

package graphipra;import java.awt.Container;import java.awt.GridLayout;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import javax.swing.BorderFactory;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JRadioButton;class MyRadio{private JFrame frame = new JFrame("welcome to lln");private Container cont = frame.getContentPane();private JRadioButton jrb1 = new JRadioButton("HEIMA");private JRadioButton jrb2 = new JRadioButton("HEIMAJAVA");private JRadioButton jrb3 = new JRadioButton("HEIMANET");private JPanel pan = new JPanel();public MyRadio(){pan.setBorder(BorderFactory.createTitledBorder("请选择喜爱的网站"));pan.setLayout(new GridLayout(1,3));pan.add(jrb1);pan.add(jrb2);pan.add(jrb3);cont.add(pan);this.frame.setSize(300,80);this.frame.setVisible(true);this.frame.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent obj){System.exit(1);}});}}public class JRadioButtonDemo01 {public static void main(String args[]){new MyRadio();}}

以上的操作中已经形成了一个单选按钮的显示,但是这样的显示是存在问题的。

此时并没有实现单选的功能,如果要实现单选的功能,则需要使用ButtonGroup,所有的单选钮要放在一个组中才可以实现单选的功能。

package graphipra;import java.awt.Container;import java.awt.GridLayout;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import javax.swing.BorderFactory;import javax.swing.ButtonGroup;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JRadioButton;class MyRadio{private JFrame frame = new JFrame("welcome to lln");private Container cont = frame.getContentPane();private JRadioButton jrb1 = new JRadioButton("HEIMA");private JRadioButton jrb2 = new JRadioButton("HEIMAJAVA");private JRadioButton jrb3 = new JRadioButton("HEIMANET");private JPanel pan = new JPanel();public MyRadio(){pan.setBorder(BorderFactory.createTitledBorder("请选择喜爱的网站"));pan.setLayout(new GridLayout(1,3));pan.add(jrb1);pan.add(jrb2);pan.add(jrb3);ButtonGroup group = new ButtonGroup();group.add(jrb1);group.add(jrb2);group.add(jrb3);cont.add(pan);this.frame.setSize(300,80);this.frame.setVisible(true);this.frame.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent obj){System.exit(1);}});}}public class JRadioButtonDemo01 {public static void main(String args[]){new MyRadio();}}

单选钮的事件处理接口是ItemListener

例:完成一个性别的选项,如果已经选中,则显示对,如果是错的,则显示错。

package graphipra;import java.awt.Container;import java.awt.GridLayout;import java.awt.event.ItemEvent;import java.awt.event.ItemListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.File;import javax.swing.BorderFactory;import javax.swing.ButtonGroup;import javax.swing.ImageIcon;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JRadioButton;class MyRadio1 implements ItemListener{private String right = "d:"+File.separator+"right.png";private String wrong = "d:"+File.separator+"wrong.gif";private JFrame frame = new JFrame("welcome to lln");private Container cont = frame.getContentPane();private JRadioButton jrb1 = new JRadioButton("男",new ImageIcon(right),true);private JRadioButton jrb2 = new JRadioButton("女",new ImageIcon(wrong),false);private JPanel pan = new JPanel();public MyRadio1(){pan.setBorder(BorderFactory.createTitledBorder("请选择性别"));pan.setLayout(new GridLayout(1,3));pan.add(this.jrb1);pan.add(this.jrb2);ButtonGroup group = new ButtonGroup();group.add(this.jrb1);group.add(this.jrb2);jrb1.addItemListener(this);jrb2.addItemListener(this);cont.add(pan);this.frame.setSize(300,80);this.frame.setVisible(true);this.frame.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent obj){System.exit(1);}});}public void itemStateChanged(ItemEvent e){if(e.getSource()==jrb1){jrb1.setIcon(new ImageIcon(right));jrb2.setIcon(new ImageIcon(wrong));}else{jrb1.setIcon(new ImageIcon(wrong));jrb2.setIcon(new ImageIcon(right));}}}public class JRadioButtonDemo03 {public static void main(String args[]){new MyRadio1();}}

在填写图形界面的时候经常会选择用户的兴趣。一个用户会有多个兴趣,那么此时肯定需要复选框(JCheckBox)的支持。

package graphipra; import java.awt.Container;import java.awt.GridLayout;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent; import javax.swing.BorderFactory;import javax.swing.JCheckBox;import javax.swing.JFrame;import javax.swing.JPanel; class MyCheckBox{    private JFrame frame = new JFrame("welcome to lln");    private Container cont = frame.getContentPane();    private JCheckBox jcb1 = new JCheckBox("HEIMA");    private JCheckBox jcb2 = new JCheckBox("HEIMAJAVA");    private JCheckBox jcb3 = new JCheckBox("HEIMANET");    private JPanel pan = new JPanel();    public MyCheckBox(){       pan.setBorder(BorderFactory.createTitledBorder("请选择你喜欢的网址"));       pan.setLayout(new GridLayout(1,3));       pan.add(this.jcb1);       pan.add(this.jcb2);       pan.add(this.jcb3);       cont.add(pan);       this.frame.setSize(330,80);       this.frame.setVisible(true);       this.frame.addWindowListener(new WindowAdapter(){           publicvoid windowClosing(WindowEvent arg){              System.exit(1);           }       });    }}publicclass JCheckBoxDemo01 {    publicstaticvoid main(String args[]){       new MyCheckBox();    } }

在图形界面,单选按钮在选项增加了图片的功能,那么在JCheckBox也同样可以增加此功能,要想完成此功能,则可以依靠事件的处理。

复选框使用的是ITemListener接口完成事件的处理。

package graphipra;import java.awt.Container;import java.awt.GridLayout;import java.awt.event.ItemEvent;import java.awt.event.ItemListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.File;import javax.swing.BorderFactory;import javax.swing.ImageIcon;import javax.swing.JCheckBox;import javax.swing.JFrame;import javax.swing.JPanel;class MyItemListener implements ItemListener{private String right ="d:"+File.separator+"right.png";private String wrong = "d:"+File.separator+"wrong.gif";public void itemStateChanged(ItemEvent e){JCheckBox jcb =(JCheckBox)e.getItem();if(jcb.isSelected()){jcb.setIcon(new ImageIcon(right));}else{jcb.setIcon(new ImageIcon(wrong));}}}class MyCheckBox1{private String wrong ="d:"+File.separator+"wrong.gif";private String right = "d:"+File.separator+"right.png";private JFrame frame = new JFrame("welcome to lln");private Container cont = frame.getContentPane();private JCheckBox jcb1 = new JCheckBox("HEIMA",new ImageIcon(wrong));private JCheckBox jcb2 = new JCheckBox("HEIMAJAVA",new ImageIcon(wrong));private JCheckBox jcb3 = new JCheckBox("HEIMANET",new ImageIcon(wrong));private JPanel pan = new JPanel();public MyCheckBox1(){pan.setBorder(BorderFactory.createTitledBorder("请选择你喜欢的网址"));pan.setLayout(new GridLayout(1,3));pan.add(this.jcb1);pan.add(this.jcb2);pan.add(this.jcb3);jcb1.addItemListener(new MyItemListener());jcb2.addItemListener(new MyItemListener());jcb3.addItemListener(new MyItemListener());cont.add(pan);this.frame.setSize(330,80);this.frame.setVisible(true);this.frame.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent arg){System.exit(1);}});}}public class JCheckBoxDemo02 {public static void main(String args[]){new MyCheckBox1();}}

JList代表一个列表,列表框可以同时将多个选项信息以列表的方式展现给用户,使用JList可以构建一个列表框。对于列表框是多选还是单选可以通过ListSelectionModel接口完成。

JList本身是不会加入滚动条的。

可以使用JScorllPane加入滚动条的操作。

package graphipra;import java.awt.Container;import java.awt.GridLayout;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.util.Vector;import javax.swing.BorderFactory;import javax.swing.JFrame;import javax.swing.JList;import javax.swing.JScrollPane;import javax.swing.ListSelectionModel;class MyList{private JFrame frame = new JFrame("welcome to lln");private Container cont = frame.getContentPane();private JList list1 = null;private JList list2 = null;public MyList(){this.frame.setLayout(new GridLayout(1,3));String nations[] = {"中国","美国","英国","法国","意大利"};Vector<String> v = new Vector<String>();v.add("HEIMA");v.add("HEIMAJAVA");v.add("HEIMANET");this.list1 = new JList(nations);this.list2 = new JList(v);this.list1.setBorder(BorderFactory.createTitledBorder("请选择你喜欢的国家"));this.list2.setBorder(BorderFactory.createTitledBorder("请选择你喜欢的网站"));this.list1.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);this.list2.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);this.cont.add(new JScrollPane(this.list1));this.cont.add(this.list2);this.frame.setSize(330,180);this.frame.setVisible(true);this.frame.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(1);}});}}public class JListDemo01 {       new MyList();}

除了使用以上的方式之外,还可以使用另外一种方式,使用ListModel创建列表框。

JList的构造方法中有一个使用ListModel构造JList对象的操作,ListModel是一个专门用于创建Jlist列表内容操作的接口。

此接口中只有一下的两个方法是最有用的。

Object getElementAt(int index),根据索引取出内容。

Int getSize():取出全部的列表内容。

package graphipra;import java.awt.Container;import java.awt.GridLayout;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.util.Vector;import javax.swing.AbstractListModel;import javax.swing.BorderFactory;import javax.swing.JFrame;import javax.swing.JList;import javax.swing.JScrollPane;import javax.swing.ListSelectionModel;class MyListModel extends AbstractListModel{private String nations[] = {"中国","美国","英国","法国","意大利"};public Object getElementAt(int index){if(index<this.nations.length){return this.nations[index];}else{return null;}}public int getSize(){return this.nations.length;}}class MyList1{private JFrame frame = new JFrame("welcome to lln");private Container cont = frame.getContentPane();private JList list1 = null;//private JList list2 = null;public MyList1(){this.frame.setLayout(new GridLayout(1,3));//String nations[] = {"中国","美国","英国","法国","意大利"};//Vector<String> v = new Vector<String>();//v.add("HEIMA");//v.add("HEIMAJAVA");//v.add("HEIMANET");this.list1 = new JList(new MyListModel());//this.list2 = new JList(v);this.list1.setBorder(BorderFactory.createTitledBorder("请选择你喜欢的国家"));//this.list2.setBorder(BorderFactory.createTitledBorder("请选择你喜欢的网站"));this.list1.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);//this.list2.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);this.cont.add(new JScrollPane(this.list1));//this.cont.add(this.list2);this.frame.setSize(330,180);this.frame.setVisible(true);this.frame.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(1);}});}}public class JListDemo02 {public static void main(String args[]){new MyList1();}}

JList中也可以进行事件监听,在JList中可以使用ListSelectionListener的监听接口实现对JList中所选项进行监听,此接口定义了如下的方法。

import javax.swing.JFrame ;import javax.swing.JList ;import java.util.Vector ;import javax.swing.BorderFactory ;import javax.swing.ListSelectionModel ;import javax.swing.JScrollPane ;import javax.swing.AbstractListModel ;import java.awt.Container ;import java.awt.GridLayout ;import java.awt.event.WindowAdapter ;import java.awt.event.WindowEvent ;import javax.swing.event.ListSelectionListener ;import javax.swing.event.ListSelectionEvent ;class MyListModel extends AbstractListModel{private String nations[] = {"中国","巴西","美国","韩国","意大利","法国"} ;public Object getElementAt(int index){if(index<this.nations.length){return this.nations[index] ;}else{return null ;}}public int getSize(){return this.nations.length ;}}class MyList implements ListSelectionListener{private JFrame frame = new JFrame("Welcome To LLN") ;private Container cont = frame.getContentPane() ;// 得到窗体容器private JList list1 = null ;public MyList(){this.frame.setLayout(new GridLayout(1,3)) ;// 定义排版String nations[] = {"中国","巴西","美国","韩国","意大利","法国"} ;this.list1 = new JList(new MyListModel()) ;this.list1.setBorder(BorderFactory.createTitledBorder("你喜欢去那个国家旅游?")) ;this.list1.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION) ;// 多选this.cont.add(new JScrollPane(this.list1)) ;this.frame.setSize(330,180) ;this.frame.setVisible(true) ;this.list1.addListSelectionListener(this) ;this.frame.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent a){System.exit(1) ;}}) ;}public void valueChanged(ListSelectionEvent e){// 事件处理int temp[] = list1.getSelectedIndices() ;System.out.print("选定的内容:") ;for(int i=0;i<temp.length;i++){System.out.print(list1.getModel().getElementAt(i) + "、") ;}System.out.println() ;}}public class JListDemo03{public static void main(String args[]){new MyList() ;}}

JList本身只是一个列表框,如果要想完成一个下拉的列表框,则就需要使用JComboBox完成

package graphipra;import java.awt.Container;import java.awt.GridLayout;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.util.Vector;import javax.swing.BorderFactory;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JLabel;class MyComboBox{private JFrame frame = new JFrame("welcome to lln");private Container cont = frame.getContentPane();private JComboBox jcb1 = null;private JComboBox jcb2 = null;public MyComboBox(){this.frame.setLayout(new GridLayout(2,2));String nations[] = {"中国","美国","英国","法国","意大利"};Vector<String> v = new Vector<String>();v.add("HEIMA");v.add("HEIMAJAVA");v.add("HEIMANET");this.jcb1 = new JComboBox(nations);this.jcb2 = new JComboBox(v);this.jcb1.setBorder(BorderFactory.createTitledBorder("选择你喜欢的国家"));this.jcb2.setBorder(BorderFactory.createTitledBorder("选择你喜欢的网站"));cont.add(this.jcb1);cont.add(this.jcb2);cont.add(new JLabel("下拉列表框"));this.frame.setSize(300,150);this.frame.setVisible(true);this.frame.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(1);}});}}public class JComboBoxDemo01 {public static void main(String args[]){new MyComboBox();}}

在图形界面中也提供了一种使用ComboBoxModel的方式完成下拉列表框。

ComboBoxModel接口是ListModel接口的子类,除了继承JListModel中的所有操作方法之外,还增加了如下的方法。

Void setSelectedItem(Object anItem)设置选项内容

Object getSelectedItem()返回选择项

package graphipra;import java.awt.Container;import java.awt.GridLayout;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.util.Vector;import javax.swing.AbstractListModel;import javax.swing.BorderFactory;import javax.swing.ComboBoxEditor;import javax.swing.ComboBoxModel;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JLabel;class MyComboBoxModel extends AbstractListModel implements ComboBoxModel{private String nations[] = {"中国","美国","英国","法国","意大利"};private String item = null;public Object getSelectedItem(){return this.item;}public void setSelectedItem(Object anItem){this.item = (String)anItem;}public int getSize(){return this.nations.length;}public Object getElementAt(int ind){return this.nations[ind];}}class MyComboBox1{private String defaultMsg = "请选择或输入国家的名称";private JFrame frame = new JFrame("welcome to lln");private Container cont = frame.getContentPane();private JComboBox jcb1 = null;//private JComboBox jcb2 = null;public MyComboBox1(){this.frame.setLayout(new GridLayout(2,1));//String nations[] = {"中国","美国","英国","法国","意大利"};//Vector<String> v = new Vector<String>();//v.add("HEIMA");//v.add("HEIMAJAVA");//v.add("HEIMANET");this.jcb1 = new JComboBox(new MyComboBoxModel());this.jcb1.setEditable(true);//this.jcb2 = new JComboBox(v);this.jcb1.setBorder(BorderFactory.createTitledBorder("选择你喜欢的国家"));//this.jcb2.setBorder(BorderFactory.createTitledBorder("选择你喜欢的网站"));ComboBoxEditor editor = null;editor = this.jcb1.getEditor();this.jcb1.configureEditor(editor, defaultMsg);this.jcb1.setMaximumRowCount(3);cont.add(this.jcb1);//cont.add(this.jcb2);cont.add(new JLabel("下拉列表框"));this.frame.setSize(300,150);this.frame.setVisible(true);this.frame.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(1);}});}}public class JComboBoxDemo02 {public static void main(String args[]){new MyComboBox1();}}

同样的道理,在下拉列表框中也可以进行事件处理,使用ItemListener完成,因为牵扯到了输入数据的问题,所以将ActionListener也一起实现了。

package graphipra;import java.awt.Container;import java.awt.Font;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.ItemEvent;import java.awt.event.ItemListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import javax.swing.BorderFactory;import javax.swing.ComboBoxEditor;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JLabel;class MyComboBox2 implements ItemListener,ActionListener{private JFrame frame = new JFrame("welcome to lln");private Container cont = frame.getContentPane();private JComboBox jcb1 = null;private JLabel label = new JLabel("heimachengxuyanlln");private String fontSize[] = {"10","12","14","16","18","20","22","24","26","48","72"};public MyComboBox2(){this.frame.setLayout(new GridLayout(2,2));this.jcb1 = new JComboBox(fontSize);this.jcb1.addItemListener(this);this.jcb1.addActionListener(this);this.jcb1.setEditable(true);this.jcb1.setBorder(BorderFactory.createTitledBorder("请选择字体大小"));ComboBoxEditor editor = null;editor = this.jcb1.getEditor();this.jcb1.configureEditor(editor, "12");this.jcb1.setMaximumRowCount(3);this.changeFontSize(12);cont.add(this.jcb1);cont.add(label);this.frame.setSize(300,150);this.frame.setVisible(true);this.frame.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(1);}});}public void itemStateChanged(ItemEvent e){if(e.getStateChange()==ItemEvent.SELECTED){String itemSize = (String)e.getItem();try{    this.changeFontSize(Integer.parseInt(itemSize));}catch(Exception e1){}}}public void actionPerformed(ActionEvent e){String item = (String)this.jcb1.getSelectedItem();int size = 12;try{size = Integer.parseInt(item);}catch(Exception e1){}this.changeFontSize(size);if(!this.isExists(item)){this.jcb1.addItem(this.jcb1.getSelectedItem());}}public boolean isExists(String item){boolean flag = false;for(int i=0;i<this.jcb1.getItemCount();i++){if(item.equals(this.jcb1.getItemAt(i))){flag = true;}}return flag;}public void changeFontSize(int size){System.out.println("");Font fnt = new Font("Serief",Font.BOLD,size);this.label.setFont(fnt);}}public class JComboBoxDemo03 {public static void main(String args[]){new MyComboBox2();}}

若在Java中实现菜单,则可以使用JMenu组件,当然,如果要使用JMenu则首先要了解JMenuBar组件,JMenuBar组件的功能是用来摆放JMenu组件,当建立完许多的JMenu组件之后,需要通过JMenuBar组件来将JMenu组件加入到窗口中。

package graphipra;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.File;import javax.swing.ImageIcon;import javax.swing.JFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JScrollPane;import javax.swing.JTextArea;public class JMenuDemo01 {public static void main(String args[]){JFrame frame = new JFrame("welcome to lln");JTextArea text = new JTextArea();text.setEditable(true);frame.getContentPane().add(new JScrollPane(text));JMenu menuFile = new JMenu("文件");menuFile.setIcon(new ImageIcon("d:"+File.separator+"icons"+File.separator+"file.gif"));JMenuBar menuBar = new JMenuBar();menuBar.add(menuFile);frame.setJMenuBar(menuBar);frame.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(1);}});frame.setVisible(true);frame.setSize(300,100);frame.setLocation(300,200);}}

以上已经简单的构建出了一个菜单条,但是此菜单中没有选项,选项用过JMenuItem完成。

package graphipra;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.File;import javax.swing.ImageIcon;import javax.swing.JFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.KeyStroke;public class JMenuDemo02 {public static void main(String args[]){JFrame frame = new JFrame("welcome to lln");JTextArea text = new JTextArea();text.setEditable(true);frame.getContentPane().add(new JScrollPane(text));JMenu menuFile = new JMenu("文件");menuFile.setIcon(new ImageIcon("d:"+File.separator+"icons"+File.separator+"file.gif"));JMenuBar menuBar = new JMenuBar();menuBar.add(menuFile);JMenuItem newItem = new JMenuItem("新建",new ImageIcon("d:"+File.separator+"icons"+File.separator+"new.gif"));JMenuItem openItem = new JMenuItem("打开",new ImageIcon("d:"+File.separator+"icons"+File.separator+"open.gif"));JMenuItem closeItem = new JMenuItem("关闭",new ImageIcon("d:"+File.separator+"icons"+File.separator+"close.gif"));JMenuItem exitItem = new JMenuItem("退出",new ImageIcon("d:"+File.separator+"icons"+File.separator+"exit.gif"));newItem.setMnemonic('N');openItem.setMnemonic('O');closeItem.setMnemonic('C');exitItem.setMnemonic('E');newItem.setAccelerator(KeyStroke.getKeyStroke('N',java.awt.Event.CTRL_MASK));openItem.setAccelerator(KeyStroke.getKeyStroke('O',java.awt.Event.CTRL_MASK));closeItem.setAccelerator(KeyStroke.getKeyStroke('C',java.awt.Event.ALT_MASK));exitItem.setAccelerator(KeyStroke.getKeyStroke('E',java.awt.Event.ALT_MASK));menuFile.add(newItem);menuFile.add(openItem);menuFile.add(closeItem);menuFile.add(exitItem);frame.setJMenuBar(menuBar);frame.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(1);}});frame.setVisible(true);frame.setSize(300,100);frame.setLocation(300,200);}}

菜单实际上就属于一个特殊的按钮,那么使用JButton的事件就可以处理菜单了。

package graphipra;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.File;import javax.swing.ImageIcon;import javax.swing.JFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.KeyStroke;public class JMenuDemo03 {public static void main(String args[]){JFrame frame = new JFrame("welcome to lln");final JTextArea text = new JTextArea();text.setEditable(true);frame.getContentPane().add(new JScrollPane(text));JMenu menuFile = new JMenu("文件");menuFile.setIcon(new ImageIcon("d:"+File.separator+"icons"+File.separator+"file.gif"));JMenuBar menuBar = new JMenuBar();menuBar.add(menuFile);JMenuItem newItem = new JMenuItem("新建",new ImageIcon("d:"+File.separator+"icons"+File.separator+"new.gif"));JMenuItem openItem = new JMenuItem("打开",new ImageIcon("d:"+File.separator+"icons"+File.separator+"open.gif"));JMenuItem closeItem = new JMenuItem("关闭",new ImageIcon("d:"+File.separator+"icons"+File.separator+"close.gif"));JMenuItem exitItem = new JMenuItem("退出",new ImageIcon("d:"+File.separator+"icons"+File.separator+"exit.gif"));newItem.setMnemonic('N');openItem.setMnemonic('O');closeItem.setMnemonic('C');exitItem.setMnemonic('E');newItem.setAccelerator(KeyStroke.getKeyStroke('N',java.awt.Event.CTRL_MASK));openItem.setAccelerator(KeyStroke.getKeyStroke('O',java.awt.Event.CTRL_MASK));closeItem.setAccelerator(KeyStroke.getKeyStroke('C',java.awt.Event.ALT_MASK));exitItem.setAccelerator(KeyStroke.getKeyStroke('E',java.awt.Event.ALT_MASK));newItem.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){text.append("===选择了“新建”菜单项\n");}});openItem.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){text.append("===选择了“打开”菜单项\n");}});closeItem.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){text.append("===选择了“关闭”菜单项\n");}});exitItem.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){text.append("===选择了“退出”菜单项\n");}});menuFile.add(newItem);menuFile.add(openItem);menuFile.add(closeItem);menuFile.add(exitItem);frame.setJMenuBar(menuBar);frame.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(1);}});frame.setVisible(true);frame.setSize(300,100);frame.setLocation(300,200);}}

我们知道一般的文本操作都有打开和关闭的操作。

在使用记事本或者word的时候,可以通过文件选择框选择要打开或保存的文件,在Swing中可以使用JFileChoose组件实现此功能。

如果使用了JFileChoose选择了一个文件,则文件将以File对象的形式返回。

文件选择框的三种返回状态:

Public static final int APPROVE_OPTION 选择确定后返回该值

Public static final int CANCEL_OPTION  选择取消后返回该值

Public static final int ERROR_OPTION   发生错误后返回该值

package graphipra;import java.awt.BorderLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.PrintStream;import java.util.Scanner;import javax.swing.JButton;import javax.swing.JFileChooser;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTextArea;class Note implements ActionListener{private JTextArea area = new JTextArea(8,10);private JFrame frame = new JFrame("welcome to lln");private JButton open = new JButton("打开文件");private JButton save = new JButton("保存文件");    private JLabel label = new JLabel("现在没有打开的文件");    private JPanel butPan = new JPanel();    public Note(){    this.butPan.add(open);    this.butPan.add(save);    this.frame.setLayout(new BorderLayout(3,3));    this.frame.add(this.label,BorderLayout.NORTH);    this.frame.add(this.butPan,BorderLayout.SOUTH);    this.frame.add(new JScrollPane(this.area),BorderLayout.CENTER);    this.frame.setSize(330,180);    this.frame.setVisible(true);    this.frame.addWindowListener(new WindowAdapter(){    public void windowClosing(WindowEvent e){    System.exit(1);    }    });        this.open.addActionListener(this);    this.save.addActionListener(this);                }    public void actionPerformed(ActionEvent e){File file = null;int result = 0;JFileChooser fileChooser = new JFileChooser();if(e.getSource()==this.open){this.area.setText("");fileChooser.setApproveButtonText("确定");result = fileChooser.showOpenDialog(this.frame);if(result==JFileChooser.APPROVE_OPTION){file = fileChooser.getSelectedFile();this.label.setText("打开的文件名称为:"+file.getName());}else if(result==JFileChooser.CANCEL_OPTION){this.label.setText("没有选择任何文件");}else{this.label.setText("操作出现错误");}if(file!=null){try{Scanner scan = new Scanner(new FileInputStream(file));scan.useDelimiter("\n");while(scan.hasNext()){this.area.append(scan.next());this.area.append("\n");}}catch(Exception e1){}}}if(e.getSource()==this.save){result = fileChooser.showSaveDialog(this.frame);if(result==JFileChooser.APPROVE_OPTION){file = fileChooser.getSelectedFile();this.label.setText("选择的存储文件名称为:"+file.getName());}else if(result==JFileChooser.CANCEL_OPTION){this.label.setText("没有选择任何文件");}else{this.label.setText("操作出现错误");}if(file!=null){try{PrintStream out = new PrintStream(new FileOutputStream(file));    out.print(this.area.getText());}catch(Exception e1){}}}}}public class JFileChooseDemo {public static void main(String args[]){new Note();}}

JTable表格组件提供了以行和列的形式显示数据的视图。在程序开发中是一个非常重要的组件,尤其在需要将一堆数据有条理的展现给用户的时候,表格设计更能显示出它的重要性。

Swing中可以通过JTable组件非常轻松的构造出所需要的表格,并且也提供了一些方法来管理这些表格的内容。

package graphipra;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import javax.swing.JFrame;import javax.swing.JScrollPane;import javax.swing.JTable;public class JTableDemo01 {public static void main(String args[]){JFrame frame = new JFrame("welcome to lln");String[] titles = {"姓名","年龄","性别","数学成绩","英语成绩","总分","是否及格"};Object[][] userinfo = {{"刘丽娜","24","女","89","98","187","及格"},{"刘娜娜","25","男","80","90","170","及格"},{"刘丽丽","23","女","75","85","160","及格"}};JTable table = new JTable(userinfo,titles);JScrollPane scr = new JScrollPane(table);frame.add(scr);frame.setSize(370,90);frame.setVisible(true);frame.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(1);}});}}

表格的显示非常的容易,直接加上数组显示即可。

在表格的建立中也可以使用TableModel建立一个表格。

package graphipra;import java.awt.BorderLayout;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import javax.swing.DefaultCellEditor;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTable;import javax.swing.table.AbstractTableModel;class DefaultTable1 extends AbstractTableModel{private String[] titles = {"姓名","年龄","性别","数学成绩","英语成绩","总分","是否及格"};private Object[][] userinfo = {{"刘丽娜",24,"女","89","98","187",true},{"刘娜娜",25,"男","80","90","170",false},{"刘丽丽",23,"女","75","85","160",true}};public int getColumnCount(){return this.titles.length;}public int getRowCount(){return this.userinfo.length;}public Object getValueAt(int rowIndex,int columnIndex){return this.userinfo[rowIndex][columnIndex];}public String getColumnName(int columnIndex){return this.titles[columnIndex];}public Class<?> getColumnClass(int columnIndex){return this.getValueAt(0, columnIndex).getClass();}public boolean isCellEditable(int rowIndex,int columnIndex){return true;}public void setValueAt(Object aValue,int rowIndex,int columnIndex){this.userinfo[rowIndex][columnIndex] = aValue;}}class TableColumnModeDemo1{private JFrame frame = new JFrame("welcome to lln");private JTable table = null;private DefaultTable1 defaultTable = new DefaultTable1();private JComboBox sexList = new JComboBox();public TableColumnModeDemo1(){this.table = new JTable(this.defaultTable);this.sexList.addItem("男");this.sexList.addItem("女");//DefaultCellEditor dce = new DefaultCellEditor(this.sexList);//this.table.getColumnModel().getColumn(2).setCellEditor(dce);this.table.getColumnModel().getColumn(2).setCellEditor(new DefaultCellEditor(this.sexList)) ;JScrollPane scr = new JScrollPane(this.table);JPanel toolBar = new JPanel();frame.add(toolBar,BorderLayout.NORTH);frame.add(scr,BorderLayout.CENTER);frame.setSize(370,90);frame.setVisible(true);frame.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(1);}});}}public class JTableDemo02 {public static void main(String args[]){new TableColumnModeDemo1();}}

除了可以使用AbstractTableModel构建表格之外,还可以使用DefaultTableModel而且使用DefaultTableModel创建的表格更加有意义。而且操作的更加方便。

package graphipra;import java.awt.BorderLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTable;import javax.swing.table.DefaultTableModel;import javax.swing.table.TableColumn;import javax.swing.table.TableColumnModel;class ChangeTable1 implements ActionListener{private JFrame frame = new JFrame("welcome to lln");private JTable table = null;private DefaultTableModel tableModel;private String[] titles = {"姓名","年龄","性别","数学成绩","英语成绩","总分","是否及格"};private Object[][] userinfo = {{"刘丽娜","24","女","89","98","187","及格"},{"刘娜娜","25","男","80","90","170","及格"},{"刘丽丽","23","女","75","85","160","及格"}};private JButton addRowBtn = new JButton("增加行");private JButton removeRowBtn = new JButton("删除行");private JButton addColBtn = new JButton("增加列");private JButton removeColBtn = new JButton("删除列");public ChangeTable1(){this.tableModel = new DefaultTableModel(this.userinfo,this.titles);this.table = new JTable(this.tableModel);JScrollPane scr = new JScrollPane(this.table);JPanel toolBar = new JPanel();toolBar.add(this.addRowBtn);toolBar.add(this.removeRowBtn);toolBar.add(this.addColBtn);toolBar.add(this.removeColBtn);frame.add(toolBar,BorderLayout.NORTH);frame.add(scr,BorderLayout.CENTER);frame.setSize(370,160);frame.setVisible(true);frame.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(1);}});this.addRowBtn.addActionListener(this);this.removeRowBtn.addActionListener(this);this.addColBtn.addActionListener(this);this.removeColBtn.addActionListener(this);}public void actionPerformed(ActionEvent e){if(e.getSource()==this.addColBtn){this.tableModel.addColumn("新增列");}if(e.getSource()==this.addRowBtn){this.tableModel.addRow(new Object[]{});}if(e.getSource()==this.removeColBtn){int colCount = this.tableModel.getColumnCount()-1;if(colCount>=0){TableColumnModel columMode = this.table.getColumnModel();TableColumn tableColumn = columMode.getColumn(colCount);columMode.removeColumn(tableColumn);this.tableModel.setColumnCount(colCount);}}if(e.getSource()==this.removeRowBtn){int rowCount = this.tableModel.getRowCount()-1;if(rowCount>=0){this.tableModel.removeRow(rowCount);this.tableModel.setRowCount(rowCount);}}}}public class JTableDemo03 {public static void main(String args[]){new ChangeTable1();}}













 

 

原创粉丝点击