------- 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();
}
}