8. 按钮(JButton)使用示例

例14. 按钮使用示例。

package GUI;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame; public class demoJButton implements ActionListener{
JFrame jf;
JButton jb;
Container con;
ImageIcon closeIcon,openIcon; public demoJButton(){
jf = new JFrame("JButton使用示例");
openIcon = new ImageIcon("open.jpg");
closeIcon = new ImageIcon("close.jpg");
jb = new JButton("打开", openIcon);
jb.addActionListener(this);
con = jf.getContentPane();
con.add(jb, BorderLayout.NORTH);
jf.setSize(, );
jf.setLocation(, );
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new demoJButton(); } public void actionPerformed(ActionEvent e) {
if(e.getSource()==jb){
if(jb.getText().compareTo("打开")==){
jb.setText("关闭");
jb.setIcon(closeIcon);
}else {
jb.setText("打开");
jb.setIcon(openIcon);
}
} } }

 9. 文本框(JTextField)和密码框(JPasswordField)使用示例

例. 文本框和密码框使用示例。

package GUI;

import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JTextField; public class demoJText {
JLabel jl1,jl2;
JFrame jf;
Container con;
JButton loginBtn,cancelBtn;
JTextField userText;
JPasswordField jpf;
HandleAction handleAction; public class HandleAction implements ActionListener {
public void actionPerformed(ActionEvent e) {
String msg;
if(e.getSource()==loginBtn){
msg = "你的用户名是:"+userText.getText()+"\n你的密码是:"+new String(jpf.getPassword());
JOptionPane.showMessageDialog(jf, msg);
}else if(e.getSource()==cancelBtn){
userText.setText("");
jpf.setText("");
}
}
} public demoJText(){
jl1 = new JLabel("用户名");
jl2 = new JLabel("密 码");
jf = new JFrame("文本框和密码框使用示例");
con = jf.getContentPane();
handleAction = new HandleAction();
loginBtn = new JButton("登录");
loginBtn.addActionListener(handleAction);
cancelBtn = new JButton("取消");
cancelBtn.addActionListener(handleAction);
userText = new JTextField();
userText.setColumns();
jpf = new JPasswordField();
jpf.setColumns();
con.setLayout(new FlowLayout());
con.add(jl1);
con.add(userText);
con.add(jl2);
con.add(jpf);
con.add(loginBtn);
con.add(cancelBtn);
jf.setSize(, );
jf.setLocation(, );
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new demoJText(); } }

如果需要在输入的密码框中显示其他符号,可以使用setEchoChar('*')来实现。

实现回车功能的该进如下:

package GUI;

import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JTextField; public class demoJText {
JLabel jl1,jl2;
JFrame jf;
Container con;
JButton loginBtn,cancelBtn;
JTextField userText;
JPasswordField jpf;
HandleAction handleAction; public class HandleAction implements ActionListener {
public void actionPerformed(ActionEvent e) {
String msg;
if(e.getSource()==loginBtn){
msg = "你的用户名是:"+userText.getText()+"\n你的密码是:"+new String(jpf.getPassword());
JOptionPane.showMessageDialog(jf, msg);
}else if(e.getSource()==cancelBtn){
userText.setText("");
jpf.setText("");
}else if(e.getSource()==userText){
jpf.requestFocus();
}else if(e.getSource()==jpf){
loginBtn.doClick();
}
}
} public demoJText(){
jl1 = new JLabel("用户名");
jl2 = new JLabel("密 码");
jf = new JFrame("文本框和密码框使用示例");
con = jf.getContentPane();
handleAction = new HandleAction();
loginBtn = new JButton("登录");
loginBtn.addActionListener(handleAction);
cancelBtn = new JButton("取消");
cancelBtn.addActionListener(handleAction);
userText = new JTextField();
userText.addActionListener(handleAction);
userText.setColumns(20);
jpf = new JPasswordField();
jpf.addActionListener(handleAction);
jpf.setColumns(20);
con.setLayout(new FlowLayout());
con.add(jl1);
con.add(userText);
con.add(jl2);
con.add(jpf);
con.add(loginBtn);
con.add(cancelBtn);
jf.setSize(300, 300);
jf.setLocation(300, 200);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new demoJText(); } }

10. 文本区(JTextArea)使用示例

例. 文本区使用使用示例。

package GUI;
import javax.swing.*;
public class demoJTextArea {
JFrame jf;
JScrollPane jsp;
JTextArea jta; public demoJTextArea(){
jf = new JFrame("这是一个JTextArea使用示例");
jta = new JTextArea();
jsp = new JScrollPane(jta);
jf.getContentPane().add(jsp);
jf.setSize(500, 400);
jf.setLocation(300, 200);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
} public static void main(String[] args) {
new demoJTextArea();
}
}

11. 复选框(JCheckBox)使用示例

例. 复选框使用示例。

package GUI;

import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import javax.swing.*;
public class demoJcheckBox implements ActionListener{
JFrame jf;
JLabel jl;
JCheckBox jb[];
Container con;
JButton OKbtn;
static final String ProvinceName[]={"北京","上海","天津","辽宁","吉林","四川","湖南","湖北","广东"}; public demoJcheckBox(){
jf = new JFrame("JCheckBox使用示例");
jl = new JLabel("请至少选择一个你去过的省份");
con = jf.getContentPane();
con.setLayout(new FlowLayout());
con.add(jl);
jb = new JCheckBox[ProvinceName.length];
for(int i=0;i<jb.length;i++){
jb[i] = new JCheckBox(ProvinceName[i],false);
con.add(jb[i]);
}
OKbtn = new JButton("确定");
OKbtn.addActionListener(this);
con.add(OKbtn);
jf.setSize(500, 400);
jf.setLocation(300, 200);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
} public void actionPerformed(ActionEvent e) {
String str= "";
int count = 0;
for(int i=0;i<jb.length;i++){
if(jb[i].isSelected()){
count++;
str = str + jb[i].getText() + " ";
}
}
if(e.getSource()==OKbtn)
JOptionPane.showMessageDialog(jf, "你选择了"+count+"个省份,它们是:\n"+str); } public static void main(String[] args) {
new demoJcheckBox(); }
}

12. 单选按钮(JRadioButton)使用示例

单选按钮本身无法知道自己和其它按钮的关系,所以要把他们放在一个名为ButtonGroup的组件中统一管理。该组件本身不可见,但对于JRadioButton却是必不可少的。

例. 单选按钮使用示例。

package GUI;

import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import javax.swing.*;
public class demoJRadioButton implements ActionListener{
JFrame jf;
JLabel jl;
JButton Okbtn;
JRadioButton jrb1,jrb2;
ButtonGroup sexbg;
Container con;
String str="男";
public demoJRadioButton(){
jf = new JFrame("JRadioButton使用示例");
jl = new JLabel("请选择性别");
Okbtn = new JButton("确定");
Okbtn.addActionListener(this);
jrb1 = new JRadioButton("男",true);
jrb1.addActionListener(this);
jrb2 = new JRadioButton("女",false);
jrb2.addActionListener(this);
sexbg = new ButtonGroup();
sexbg.add(jrb1);
sexbg.add(jrb2);
con = jf.getContentPane();
con.setLayout(new FlowLayout());
con.add(jl);
con.add(jrb1);
con.add(jrb2);
con.add(Okbtn);
jf.setSize(500, 400);
jf.setLocation(300, 200);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent e) {
if(e.getSource() instanceof JRadioButton){
str = e.getActionCommand();
}else{
JOptionPane.showMessageDialog(jf, "你选择了"+str);
} } public static void main(String[] args) {
new demoJRadioButton(); } }

13. 列表框(JList)使用示例

例. 列表框使用示例。

package GUI;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import javax.swing.*;
public class demoJList implements ActionListener{
JFrame jf;
JPanel jp;
JButton addBtn,delBtn;
Container con;
JList lList,rList;
DefaultListModel lModel,rModel;
JScrollPane ljsp,rjsp;
JSplitPane jsp;
static final String city[] = {"北京","上海","天津","辽宁","吉林","四川","湖南","湖北","广东"}; public demoJList(){
jf = new JFrame("JList使用示例");
jp = new JPanel();
addBtn = new JButton("选中>>");
addBtn.addActionListener(this);
delBtn = new JButton("撤销<<");
delBtn.addActionListener(this);
con = jf.getContentPane();
lModel = new DefaultListModel();
for(int i=0;i<city.length;i++)
lModel.addElement(city[i]);
rModel = new DefaultListModel();
lList = new JList(lModel);
rList = new JList(rModel);
ljsp = new JScrollPane(lList);
rjsp = new JScrollPane(rList);
jsp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true,ljsp,rjsp);
con.add(jsp, BorderLayout.CENTER);
jp.add(addBtn);
jp.add(delBtn);
con.add(jp, BorderLayout.SOUTH);
jf.setSize(500, 400);
jf.setLocation(300, 200);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jsp.setDividerLocation(0.5);
} public void actionPerformed(ActionEvent e) {
int i;
if(e.getSource()==addBtn){
for(i=0;i<lModel.size();i++)
if(lList.isSelectedIndex(i))
rModel.addElement(lModel.getElementAt(i));
for(i--;i>=0;i--)
if(lList.isSelectedIndex(i))
lModel.removeElementAt(i);
}else{
for(i=0;i<rModel.size();i++)
if(rList.isSelectedIndex(i))
lModel.addElement(rModel.getElementAt(i));
for(i--;i>=0;i--)
if(rList.isSelectedIndex(i))
rModel.removeElementAt(i);
} } public static void main(String[] args) {
new demoJList();
}
}

14. 组合框(JComboBox)使用示例

例. 组合框使用示例。

package GUI;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener; import javax.swing.*;
public class demoJComboBox implements ItemListener,ActionListener{
JFrame jf;
JLabel jl1,jl2;
JComboBox jcb;
JButton btn;
Container con;
static final String city[] = {"北京","上海","天津","辽宁","吉林","四川","湖南","湖北","广东"}; public demoJComboBox(){
jf = new JFrame("JComboBox使用示例");
jl1 = new JLabel("您的选择是:");
jl2 = new JLabel(" ");
jcb = new JComboBox(city);
jcb.setEditable(true);
jcb.addItemListener(this);
btn = new JButton("可以编辑");
btn.addActionListener(this);
con = jf.getContentPane();
con.setLayout(new FlowLayout());
con.add(jl1);
con.add(jl2);
con.add(jcb);
con.add(btn);
jf.setSize(500, 400);
jf.setLocation(300, 200);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
} public void actionPerformed(ActionEvent e) {
if(e.getSource()==btn){
if(btn.getText().compareTo("可以编辑")==0){
btn.setText("不可编辑");
jcb.setEditable(true);
}else{
btn.setText("可以编辑");
jcb.setEditable(false);
}
}
} public void itemStateChanged(ItemEvent e) {
if(e.getStateChange()==ItemEvent.SELECTED)
jl2.setText((String)jcb.getSelectedItem());
} public static void main(String[] args) {
new demoJComboBox(); } }

15. 表格(Jtable)使用示例

一般情况下,可以通过Jtable(int row,int col)来指定表格拥有的行和列。如果需要动态地调整列数,可以直接使用它的方法addColumn()和removeColumn()。如果需要调整行数,则像JList一样,需要调用和它的联系的DefaultTableModel的addRow()和removeRow()方法。还有,JTable本身不提供滚动条,需要把它放到JScrolPane中才能滚动。

例15.1 表格使用示例1。

package GUI;
import java.awt.Container; import javax.swing.*;
public class demoJTable_1 {
JFrame jf;
JScrollPane jsp;
JTable jtab;
Container con; public demoJTable_1(){
jf = new JFrame("JTable使用示例");
jtab = new JTable(10,3);
jsp = new JScrollPane(jtab);
con = jf.getContentPane();
con.add(jsp);
jf.setSize(500, 400);
jf.setLocation(300, 200);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new demoJTable_1();
} }

例15.2 表格使用示例2.

package GUI;
import javax.swing.*;
public class demoJTable_2 {
JFrame jf;
JScrollPane jsp;
JTable jtab; public demoJTable_2(){
Object[][] stu = {
{"小王",new Integer(66),new Integer(72),new Integer(98),new Boolean(false)},
{"小张",new Integer(82),new Integer(69),new Integer(78),new Boolean(true)}
};
String[] title = {"姓名","语文","数学","总分","及格"};
jf = new JFrame("JTable使用示例");
jtab = new JTable(stu,title);
jsp = new JScrollPane(jtab);
jf.add(jsp);
jf.setSize(500, 400);
jf.setLocation(300, 200);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new demoJTable_2(); } }

注意:这里必须要使用滚动面板来显示表格,如果直接将表格加入到JFrame中,表头将无法正常显示。

例15.3 表格使用示例3。

package GUI;
import java.awt.Container; import javax.swing.*;
import javax.swing.table.TableColumn;
public class demoJTable_3 {
JFrame jf;
JScrollPane jsp;
JTable jtab;
Container con;
Object[][] stu = {
{"小王",new Integer(66),new Integer(72),new Integer(98),new Boolean(false),new Boolean(false)},
{"小张",new Integer(82),new Integer(69),new Integer(78),new Boolean(true),new Boolean(false)}
};
String[] title = {"姓名","语文","数学","总分","及格","作弊"}; public demoJTable_3(){
jf = new JFrame();
jf.setTitle("JTable使用示例");
jtab = new JTable(stu,title);
//利用JTable中的getColumnModel()方法取得TableColumnModel对象的引用
//利用对象的setPreferredWidth()方法就可以控制字段的宽度
for(int i=0;i<title.length;i++){
TableColumn column = jtab.getColumnModel().getColumn(i);
if(i%2==0)
column.setPreferredWidth(150);
else
column.setPreferredWidth(50);
}
jsp = new JScrollPane(jtab);
con = jf.getContentPane();
con.add(jsp);
jf.setSize(500, 400);
jf.setLocation(300, 200);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new demoJTable_3();
}
}

前面的3个例子都只是显示数据供用户查看,如果需要获取用户修改后的数据,程序只需利用getColumnCount()和getRowCount()方法,获得JTable的列数和行数,然后遍历整个JTable,利用getValueAt()方法获取单元格里的内容就可以了。如果修改某个单元格里面的值,也可以利用setValueAt()来完成。

例15.4 表格使用示例4.

package GUI;
import javax.swing.*; import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class demoJTable_4 implements ActionListener {
JFrame jf;
JTable sourceTable,destTable;
JScrollPane jsp1,jsp2;
JButton copyBtn;
Container con;
JPanel jp;
int row,col; public demoJTable_4(){
jf = new JFrame("JTable使用示例");
sourceTable = new JTable(2,3);
col = sourceTable.getColumnCount();
row = sourceTable.getRowCount();
destTable = new JTable(col,row);
jsp1 = new JScrollPane(sourceTable);
jsp2 = new JScrollPane(destTable);
copyBtn = new JButton("复制数据");
copyBtn.addActionListener(this);
jp = new JPanel();
jp.add(copyBtn);
con = jf.getContentPane();
con.setLayout(new GridLayout(3,1));
con.add(jsp1);
con.add(jp);
con.add(jsp2);
jf.setSize(500, 400);
jf.setLocation(300, 200);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent e) {
int i,j;
Object obj;
if(e.getSource()==copyBtn){
for(i=0;i<row;i++)
for(j=0;j<col;j++){
obj = sourceTable.getValueAt(i, j);
destTable.setValueAt(obj, j, i);
}
}
} public static void main(String[] args){
new demoJTable_4();
} }

与JTable相关的模型有3个:TableModel、TableColumnModel和ListSelectionModel。其中最常用的是TableModel。

重写一个MyTableModle来代替系统提供的DefaultTableModle,这样可以显示Boolean类型的数据时,不以字符串形式显示,而是以checkBox的形式显示,并且字符串会左对齐,而数值则右对齐。

例15.5 表格使用示例5.

package GUI;

import javax.swing.table.AbstractTableModel;

final class MyTableModel extends AbstractTableModel {
private Object data[][]; //存储表格中的数据
private String[] tableName; //存储表头
public MyTableModel(Object[][] data, String[] tableName){
this.data = data;
this.tableName = tableName;
} public MyTableModel(Object[][] data){
char[] tch = {'A'};
tableName = new String[data[0].length];
this.data = data;
for(int i=0;i<tableName.length;i++){
tableName[i] = new String(tch);
tch[0]++;
}
} public int getRowCount() {
return data.length;
} public int getColumnCount() {
return data[0].length;
} public Object getValueAt(int rowIndex, int columnIndex) {
return data[rowIndex][columnIndex];
} public Class<?> getColumnClass(int columnIndex) {
return data[0][columnIndex].getClass();
} public String getColumnName(int column) {
return tableName[column];
} }

在上述类中,真正和显示有关的就只有getColumnClass()方法。该方法返回实际存储数据的类类型,因此在显示的时候,表格会根据这些类型做调整。

package GUI;
import java.awt.Container; import javax.swing.*;
import javax.swing.table.TableColumn;
public class demoJTable_5 {
JFrame jf;
JScrollPane jsp;
JTable jtab;
MyTableModel mtm;
Container con;
Object[][] stu = {
{"小王",new Integer(66),new Integer(72),new Integer(98),new Boolean(false),new Boolean(false)},
{"小张",new Integer(82),new Integer(69),new Integer(78),new Boolean(true),new Boolean(false)}
};
String[] title = {"姓名","语文","数学","总分","及格","作弊"}; public demoJTable_5(){
jf = new JFrame();
jf.setTitle("JTable使用示例");
//创建带内容和表头信息的模型
mtm = new MyTableModel(stu,title);
//用模型创建表格,取代默认的模型
jtab = new JTable(mtm);
//利用JTable中的getColumnModel()方法取得TableColumnModel对象的引用
//利用对象的setPreferredWidth()方法就可以控制字段的宽度
for(int i=0;i<title.length;i++){
TableColumn column = jtab.getColumnModel().getColumn(i);
if(i%2==0)
column.setPreferredWidth(150);
else
column.setPreferredWidth(50);
}
jsp = new JScrollPane(jtab);
con = jf.getContentPane();
con.add(jsp);
jf.setSize(500, 400);
jf.setLocation(300, 200);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new demoJTable_5();
}
}

最新文章

  1. SpringMvc中初始化参数绑定
  2. ichecked 全选、反选
  3. android的JNI 、 NDK 学习!
  4. mvn打包idea项目
  5. CCF推荐国际学术期刊
  6. Linux查看系统信息命令总结
  7. 关于项目中遇到的NullPointerException异常时处理手段
  8. Android4.0的Alertdialog对话框,设置点击其他位置不消失
  9. poj A Round Peg in a Ground Hole
  10. 设计模式:模版模式(Template Pattern)
  11. Ruby新手教程和技巧
  12. acdream 1157Segments cdq分治
  13. HTML5.1就要来了
  14. 主题模型 利用gibbslda做数据集主题抽样
  15. 使用cmd命令打开Python文件式程序方法
  16. Symbol(第6种基本数据类型)
  17. Btrace介绍
  18. U3D学习资料收集
  19. JVM实践
  20. vue2.0 移动端,下拉刷新,上拉加载更多插件 转:

热门文章

  1. Gitlab Issue Tracker and Wiki(一)
  2. JSTL使用
  3. poj1847 Tram(Dijkstra || Floyd || SPFA)
  4. hdoj1879 继续畅通工程(Prime || Kruskal)
  5. JMeter导入jmx运行脚本时出现这样的错误jmeter.save.SaveService: Conversion error com.thoughtworks.xstream.converters.ConversionException:
  6. JS日期、时间 格式化转换方法
  7. R语言实战(六)重抽样与自助法
  8. [leetcode tree]96. Unique Binary Search Trees
  9. nginx + uswgi +django
  10. jQuery记忆巩固