黑马程序员java JText的数据添加到…
2013-09-22 14:21
525 查看
----------------------android培训、java培训、期待与您交流!----------------------
一、JTable
例:建立表格
import java.awt.event.WindowAdapter
;
import java.awt.event.WindowEvent
;
import javax.swing.JTable
;
import javax.swing.JScrollPane
;
import javax.swing.JFrame
;
public class
JTableDemo01{
public static void main(String
args[]){
JFrame frame = new JFrame("Welcome To MLDN") ;
String[] titles = {"姓名","年龄","性别","数学成绩","英语成绩","总分","是否及格"}
;
Object [][] userInfo = {
{"李兴华",30,"男",89,97,186,true} ,
{"李康",23,"女",90,93,183,false}
} ; // 定义数据
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) ;
}
});
}
}
在以上程序中使用一个二维数组表示表格中的数据,表格中的数据按照标题栏设置的顺序进行排列,之后将表格加入到一个滚动框中,再将滚动框加入到面板中。
注意:JTable使用时要加入到JScrollPane中。
在使用JTable时,如果不将一个JTable加入到JScrollPane中,则表格的标题将无法显示。
二、使用TableModel构建表格
使用JTable构建的表格相对比较单一,如果想制作一些操作界面更加友好的表格,例如在表格上加入一些单选按钮或下拉列表框,则就要借助于TableModel接口。
例:使用AbstractTableModel构建表格
import java.awt.BorderLayout ;
import java.awt.event.WindowAdapter
;
import java.awt.event.WindowEvent
;
import javax.swing.JTable
;
import javax.swing.JScrollPane
;
import javax.swing.JFrame
;
import javax.swing.JPanel
;
import javax.swing.DefaultCellEditor
;
import javax.swing.JComboBox
;
import
javax.swing.table.AbstractTableModel ;
class DefaultTable extends
AbstractTableModel{
private String[] titles =
{"姓名","年龄","性别","数学成绩","英语成绩","总分","是否及格"} ;
private Object [][] userInfo =
{
{"李兴华",30,"男",89,97,186,true} ,
{"李康",23,"女",90,93,183,false}
} ; // 定义数据
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 TableColumnModelDemo{
private JFrame frame = new
JFrame("Welcome To MLDN") ;
private JTable table = null
;
private DefaultTable defaultTable =
new DefaultTable() ; // TableModel
private JComboBox sexList = new
JComboBox() ;
public
TableColumnModelDemo(){
this.table = new JTable(this.defaultTable) ;
this.sexList.addItem("男") ;
this.sexList.addItem("女") ;
// 以下拉列表框的形式显示
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 TableColumnModelDemo()
;
}
}
从
以上程序运行结果来看,表格中的数据都是按照指定格式进行显示的,而且因为在DefaultTable类中覆写了isCellEditable()方法,
所以表格的每一项都是可编辑的。对于性别的选项使用了一个下拉列表框的形式进行显示,而且在“是否及格”列上,是使用一个CheckBox代替了原有的
true及false。
使用AbstractTableModel类可以方便地构建表格,而使用其子类DefaultTableModel则可以对表格进行动态的操作,例如,增加行(列)、删除行(列)等。
例:动态操作表格
import java.awt.BorderLayout ;
import java.awt.event.WindowAdapter
;
import java.awt.event.ActionListener
;
import java.awt.event.WindowEvent
;
import java.awt.event.ActionEvent
;
import javax.swing.JTable
;
import javax.swing.JButton
;
import javax.swing.JScrollPane
;
import javax.swing.JFrame
;
import javax.swing.JPanel
;
import javax.swing.DefaultCellEditor
;
import javax.swing.JComboBox
;
import
javax.swing.table.DefaultTableModel ;
import
javax.swing.table.TableColumnModel ;
import javax.swing.table.TableColumn
;
class ChangeTable implements ActionListener{ //
通过按钮实现动态表格
private JFrame frame = new
JFrame("Welcome To MLDN") ;
private JTable table = null
;
private DefaultTableModel tableModel
; // TableModel
private String[] titles =
{"姓名","年龄","性别","数学成绩","英语成绩","总分","是否及格"} ;
private Object [][] userInfo =
{
{"李兴华",30,"男",89,97,186,true} ,
{"李康",23,"女",90,93,183,false}
} ; // 定义数据
private JButton addRowBtn = new
JButton("增加行") ; // 定义按钮
private JButton removeRowBtn = new
JButton("删除行") ; // 定义按钮
private JButton addColBtn = new
JButton("增加列") ; // 定义按钮
private JButton removeColBtn = new
JButton("删除列") ; // 定义按钮
public ChangeTable(){
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
TableColumnModel columMode = this.table.getColumnModel()
;
TableColumn taleColumn = columMode.getColumn(colCount)
;
columMode.removeColumn(taleColumn) ; // 删除指定的列
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 ChangeTable()
;
}
}
在程序中,使用DefaultTableModel可以方便地实现增加行(列)、删除行(列)的各种操作。在删除行前先取得最后一行的编号,之后通过removeRow()方法重新设置行数,这样在下次操作时就不会出现数组越界的异常信息。
本章要点
1、Swing是在AWT基础上的一种扩展应用,提供了一套轻量级的操作组件。
2、在Swing中所有的组件都是以字母J开头的,所有的组件都是继承自Component类。
3、JFrame是Swing提供的一个标准容器,可以向该容器上加入各个组件。
4、JLabel是一个标签组件,用于显示基本信息。
5、JButton是一个按钮组件,如果要构建不弹起的按钮则要使用JToggleButton。
6、在图形界面中主要提供了FlowLayout、BorderLayout、GridLayout、CardLayout、绝对定位5种布局管理器。
7、可以使用JTextField完成一个文本框,使用JPasswordField完成一个密码框,使用JTextArea完成一个文本域。
8、事件发生时会产生事件源并找到相应的监听程序进行处理,在图形界面中提供了多个Listener接口进行事件的处理。
9、在使用JRadioButton完成单选操作时,需要将多个JRadioButton加入到ButtonGroup中,才能实现单选的功能。
10、JComboBox可以完成下拉列表框的操作,使用JList可以完成列表框的显示。
11、要完成菜单显示,需要将多个JMenu加入到JMenuBar中,菜单中的菜单项使用JMenuItem处理,每一个JMenuItem都表示一个特殊的按钮。
12、JFileChooser可以完成文件选择的对话框。
13、如果要显示一组数据,则可以使用表格的形式进行显示。
----------------------android培训、java培训、期待与您交流!----------------------
详情请查看:http://edu.csdn.net/heima
一、JTable
例:建立表格
import java.awt.event.WindowAdapter
;
import java.awt.event.WindowEvent
;
import javax.swing.JTable
;
import javax.swing.JScrollPane
;
import javax.swing.JFrame
;
public class
JTableDemo01{
public static void main(String
args[]){
JFrame frame = new JFrame("Welcome To MLDN") ;
String[] titles = {"姓名","年龄","性别","数学成绩","英语成绩","总分","是否及格"}
;
Object [][] userInfo = {
{"李兴华",30,"男",89,97,186,true} ,
{"李康",23,"女",90,93,183,false}
} ; // 定义数据
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) ;
}
});
}
}
在以上程序中使用一个二维数组表示表格中的数据,表格中的数据按照标题栏设置的顺序进行排列,之后将表格加入到一个滚动框中,再将滚动框加入到面板中。
注意:JTable使用时要加入到JScrollPane中。
在使用JTable时,如果不将一个JTable加入到JScrollPane中,则表格的标题将无法显示。
二、使用TableModel构建表格
使用JTable构建的表格相对比较单一,如果想制作一些操作界面更加友好的表格,例如在表格上加入一些单选按钮或下拉列表框,则就要借助于TableModel接口。
例:使用AbstractTableModel构建表格
import java.awt.BorderLayout ;
import java.awt.event.WindowAdapter
;
import java.awt.event.WindowEvent
;
import javax.swing.JTable
;
import javax.swing.JScrollPane
;
import javax.swing.JFrame
;
import javax.swing.JPanel
;
import javax.swing.DefaultCellEditor
;
import javax.swing.JComboBox
;
import
javax.swing.table.AbstractTableModel ;
class DefaultTable extends
AbstractTableModel{
private String[] titles =
{"姓名","年龄","性别","数学成绩","英语成绩","总分","是否及格"} ;
private Object [][] userInfo =
{
{"李兴华",30,"男",89,97,186,true} ,
{"李康",23,"女",90,93,183,false}
} ; // 定义数据
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 TableColumnModelDemo{
private JFrame frame = new
JFrame("Welcome To MLDN") ;
private JTable table = null
;
private DefaultTable defaultTable =
new DefaultTable() ; // TableModel
private JComboBox sexList = new
JComboBox() ;
public
TableColumnModelDemo(){
this.table = new JTable(this.defaultTable) ;
this.sexList.addItem("男") ;
this.sexList.addItem("女") ;
// 以下拉列表框的形式显示
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 TableColumnModelDemo()
;
}
}
从
以上程序运行结果来看,表格中的数据都是按照指定格式进行显示的,而且因为在DefaultTable类中覆写了isCellEditable()方法,
所以表格的每一项都是可编辑的。对于性别的选项使用了一个下拉列表框的形式进行显示,而且在“是否及格”列上,是使用一个CheckBox代替了原有的
true及false。
使用AbstractTableModel类可以方便地构建表格,而使用其子类DefaultTableModel则可以对表格进行动态的操作,例如,增加行(列)、删除行(列)等。
例:动态操作表格
import java.awt.BorderLayout ;
import java.awt.event.WindowAdapter
;
import java.awt.event.ActionListener
;
import java.awt.event.WindowEvent
;
import java.awt.event.ActionEvent
;
import javax.swing.JTable
;
import javax.swing.JButton
;
import javax.swing.JScrollPane
;
import javax.swing.JFrame
;
import javax.swing.JPanel
;
import javax.swing.DefaultCellEditor
;
import javax.swing.JComboBox
;
import
javax.swing.table.DefaultTableModel ;
import
javax.swing.table.TableColumnModel ;
import javax.swing.table.TableColumn
;
class ChangeTable implements ActionListener{ //
通过按钮实现动态表格
private JFrame frame = new
JFrame("Welcome To MLDN") ;
private JTable table = null
;
private DefaultTableModel tableModel
; // TableModel
private String[] titles =
{"姓名","年龄","性别","数学成绩","英语成绩","总分","是否及格"} ;
private Object [][] userInfo =
{
{"李兴华",30,"男",89,97,186,true} ,
{"李康",23,"女",90,93,183,false}
} ; // 定义数据
private JButton addRowBtn = new
JButton("增加行") ; // 定义按钮
private JButton removeRowBtn = new
JButton("删除行") ; // 定义按钮
private JButton addColBtn = new
JButton("增加列") ; // 定义按钮
private JButton removeColBtn = new
JButton("删除列") ; // 定义按钮
public ChangeTable(){
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
TableColumnModel columMode = this.table.getColumnModel()
;
TableColumn taleColumn = columMode.getColumn(colCount)
;
columMode.removeColumn(taleColumn) ; // 删除指定的列
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 ChangeTable()
;
}
}
在程序中,使用DefaultTableModel可以方便地实现增加行(列)、删除行(列)的各种操作。在删除行前先取得最后一行的编号,之后通过removeRow()方法重新设置行数,这样在下次操作时就不会出现数组越界的异常信息。
本章要点
1、Swing是在AWT基础上的一种扩展应用,提供了一套轻量级的操作组件。
2、在Swing中所有的组件都是以字母J开头的,所有的组件都是继承自Component类。
3、JFrame是Swing提供的一个标准容器,可以向该容器上加入各个组件。
4、JLabel是一个标签组件,用于显示基本信息。
5、JButton是一个按钮组件,如果要构建不弹起的按钮则要使用JToggleButton。
6、在图形界面中主要提供了FlowLayout、BorderLayout、GridLayout、CardLayout、绝对定位5种布局管理器。
7、可以使用JTextField完成一个文本框,使用JPasswordField完成一个密码框,使用JTextArea完成一个文本域。
8、事件发生时会产生事件源并找到相应的监听程序进行处理,在图形界面中提供了多个Listener接口进行事件的处理。
9、在使用JRadioButton完成单选操作时,需要将多个JRadioButton加入到ButtonGroup中,才能实现单选的功能。
10、JComboBox可以完成下拉列表框的操作,使用JList可以完成列表框的显示。
11、要完成菜单显示,需要将多个JMenu加入到JMenuBar中,菜单中的菜单项使用JMenuItem处理,每一个JMenuItem都表示一个特殊的按钮。
12、JFileChooser可以完成文件选择的对话框。
13、如果要显示一组数据,则可以使用表格的形式进行显示。
----------------------android培训、java培训、期待与您交流!----------------------
详情请查看:http://edu.csdn.net/heima
相关文章推荐
- 黑马程序员JAVA 为菜单添加快捷接…
- 黑马程序员java 图片添加水印
- 黑马程序员java 图片添加水印
- 黑马程序员JAVA编写的 时钟 程序
- 黑马程序员JAVA 颜色过滤器 程序
- 黑马程序员 Java基础<二>--->数据类型,数组,switch语句
- 黑马程序员//JAVA 树形结构程序事…
- 黑马程序员——java基础知识篇——>标识符、关键字、常量、进制表示、数据类型、运算符等
- Java学习笔记3 原生数据类型 Primi…
- java多线程网络数据采集&nbsp;&nbsp;1
- 黑马程序员java 颜色容器ColorChoo…
- PHP 添加数据时 同时获取ID
- 黑马程序员JAVA 有效的身份证号——…
- 黑马程序员JAVA 记事本
- 黑马程序员_毕向东Java基础_集合(1)String&StringBuffer&StringBuilder&基本数据类型包装类
- 读取数据库中的数据到xml java
- 黑马程序员JAVA 模拟QQ聊天工具 CA…
- 将批量xml文件 数据批量添加…
- 黑马程序员-- JAVA CardLayout卡…
- 如何解决在快速向jtable添加数据的时候报AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException:异常