- 写作不易,如果对您有帮助还请点个赞或者收藏或者推荐~多谢
- 文章如有错误或疏漏之处还请不吝赐教
- 本文假定读者已经掌握一门编程语言的基础,不适宜从未接触编程的同学
- 参考资料已在文末列出
本节讲Swing中的组件
JLabel
标签是一种可以包含文本和图片的非交互组件,其文本可以是单行文本,也可以是 HTML 文本。对于只包含文本的标签可以使用 JLabel 类,该类的主要构造方法有如下几种形式。
- JLabel():创建无图像并且标题为空字符串的 JLabel。
- JLabel(Icon image):创建具有指定图像的 JLabel。
- JLabel(String text):创建具有指定文本的 JLabel。
- JLabel(String textjcon image,int horizontalAlignment):创建具有指定文本、图像和水平对齐方式的 JLabel,horizontalAlignment 的取值有 3 个,即 JLabel.LEFT、JLabel.RIGHT 和 JLabel.CENTER。
package chapt2;
import javax.swing.*;
public class test{
public static void main(String[] args) {
JFrame frame = new JFrame();
JPanel pane = new JPanel();
frame.add(pane);
JLabel lbl1 = new JLabel("label1");
pane.add(lbl1);
frame.setSize(300,200);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
JButton
- JButton():创建一个无标签文本、无图标的按钮。
- JButton(Icon icon):创建一个无标签文本、有图标的按钮。
- JButton(String text):创建一个有标签文本、无图标的按钮。
- JButton(String text,Icon icon):创建一个有标签文本、有图标的按钮。
JTextField
- JTextField():创建一个默认的文本框。
- JTextField(String text):创建一个指定初始化文本信息的文本框。
- JTextField(int columns):创建一个指定列数的文本框。
- JTextField(String text,int columns):创建一个既指定初始化文本信息,又指定列数的文本框。
package chapt2;
import java.awt.Color;
import java.awt.Font;
import javax.swing.*;
public class test{
public static void main(String[] args) {
JFrame frame=new JFrame("Java文本框组件示例"); //创建Frame窗口
JPanel jp=new JPanel(); //创建面板
JTextField txtfield1=new JTextField(); //创建文本框
txtfield1.setText("普通文本框"); //设置文本框的内容
JTextField txtfield2=new JTextField(28);
txtfield2.setFont(new Font("楷体",Font.BOLD,16)); //修改字体样式
txtfield2.setText("指定长度和字体的文本框");
JTextField txtfield3=new JTextField(30);
txtfield3.setText("居中对齐");
txtfield3.setHorizontalAlignment(JTextField.CENTER); //居中对齐
jp.add(txtfield1);
jp.add(txtfield2);
jp.add(txtfield3);
frame.add(jp);
frame.setBounds(300,200,400,100);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
JPasswordField
package chapt2;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class test extends JFrame implements ActionListener{
JLabel l1,l2;
JTextField t1;
JPasswordField t2;
JButton b1,b2;
test(){
setSize(300,200);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setResizable(false);
setLocationRelativeTo(null);
JPanel pane = new JPanel();
add(pane);
l1 = new JLabel("用户名");
l2 = new JLabel("密码");
b1 = new JButton("登录");
b2 = new JButton("重置");
t1 = new JTextField(10);
t2 = new JPasswordField(10);
t2.setEchoChar('*');
JPanel p1,p2,p3,p4;
p1 = new JPanel(new BorderLayout());
p2 = new JPanel(new FlowLayout(FlowLayout.CENTER,50,0));
p3 = new JPanel(new GridLayout(2,1,5,5));
p4 = new JPanel(new GridLayout(2,1,5,5));
p1.add(p3,BorderLayout.WEST);
p1.add(p4,BorderLayout.EAST);
p2.setBorder(BorderFactory.createEmptyBorder(0,0,20,0));
p3.setBorder(BorderFactory.createEmptyBorder(20,20,10,5));
p4.setBorder(BorderFactory.createEmptyBorder(20,5,10,20));
p3.add(l1); p3.add(l2);
p4.add(t1); p4.add(t2);
p2.add(b1); p2.add(b2);
pane.add(p1,BorderLayout.NORTH);
pane.add(p2,BorderLayout.CENTER);
b1.addActionListener(this);
b2.addActionListener(this);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
String str = e.getActionCommand();
if(str.equals("登录")){
JOptionPane.showMessageDialog(this, "登录成功");;
}else{t1.setText("");t2.setText("");}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new test();
}
});
}
}
JTextArea
- JTextArea():创建一个默认的文本域。
- JTextArea(int rows,int columns):创建一个具有指定行数和列数的文本域。
- JTextArea(String text):创建一个包含指定文本的文本域。
- JTextArea(String text,int rows,int columns):创建一个既包含指定文本,又包含指定行数和列数的多行文本域。
创建包含文本框、文本区和“提交”按钮的窗口
在文本框中输入文字,单击“提交”按钮,将文本框中的内容追加到文本区中,并清空文本框
package chapt2;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class test extends JFrame implements ActionListener{
JTextField txt = new JTextField(20);
JButton submit = new JButton("Submit");
JTextArea txtarea = new JTextArea(5,5);
test(){
setSize(500,200);
setDefaultCloseOperation(EXIT_ON_CLOSE);
JPanel pane = new JPanel();
add(pane);
submit.addActionListener(this);
txtarea.setLineWrap(true);
pane.add(txt);
pane.add(submit);
pane.add(txtarea);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
String str = e.getActionCommand();
if(str.equals("Submit")){
txtarea.append(txt.getText());
txt.setText("");
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new test();
}
});
}
}
JRadioButton
单选按钮与复选框类似都有两种状态,不同的是一组单选按钮中只能有一个处于选中状态。Swing 中 JRadioButton 类实现单选按钮,它与 JCheckBox 一样都是从 JToggleButton 类派生出来的。JRadioButton 通常位于一个 ButtonGroup 按钮组中,不在按钮组中的 JRadioButton 也就失去了单选按钮的意义。
在同一个 ButtonGroup 按钮组中的单选按钮,只能有一个单选按钮被选中。因此,如果创建的多个单选按钮其初始状态都是选中状态,则最先加入 ButtonGroup 按钮组的单选按钮的选中状态被保留,其后加入到 ButtonGroup 按钮组中的其他单选按钮的选中状态被取消。
JRadioButton 类的常用构造方法如下。
- JRadioButton():创建一个初始化为未选择的单选按钮,其文本未设定。
- JRadioButton(Icon icon):创建一个初始化为未选择的单选按钮,其具有指定的图像但无文本。
- JRadioButton(Icon icon,boolean selected):创建一个具有指定图像和选择状态的单选按钮,但无文本。
- JRadioButton(String text):创建一个具有指定文本但未选择的单选按钮。
- JRadioButton(String text,boolean selected):创建一个具有指定文本和选择状态的单选按钮。
- JRadioButton(String text,Icon icon):创建一个具有指定的文本和图像并初始化为未选择的单选按钮。
- JRadioButton(String text,Icon icon,boolean selected):创建一个具有指定的文本、图像和选择状态的单选按钮。
有三个单选按钮,分别显示“红色”、“绿色”和“蓝色”,选中某个按钮后,面板的背景色变为相应的颜色
package chapt2;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class test extends JFrame implements ActionListener,ItemListener{
JPanel pnlHead,pnlBody;
JRadioButton r1,r2,r3;
test(){
setSize(300,200);
setDefaultCloseOperation(EXIT_ON_CLOSE);
JPanel pane = new JPanel();
add(pane);
pane.setLayout(new BorderLayout());
pnlHead = new JPanel(new GridLayout(1,3));
pnlBody = new JPanel();
pnlBody.setBackground(Color.RED);
r1 = new JRadioButton("红色",true);
r2 = new JRadioButton("绿色");
r3 = new JRadioButton("蓝色");
pnlHead.add(r1); pnlHead.add(r2); pnlHead.add(r3);
ButtonGroup group = new ButtonGroup();
group.add(r1); group.add(r2); group.add(r3);
pane.add(pnlHead,BorderLayout.NORTH);
pane.add(pnlBody,BorderLayout.CENTER);
r1.addItemListener(this);
r2.addItemListener(this);
r3.addItemListener(this);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
}
@Override
public void itemStateChanged(ItemEvent e) {
if(r1.isSelected())pnlBody.setBackground(Color.RED);
else if(r2.isSelected())pnlBody.setBackground(Color.GREEN);
else pnlBody.setBackground(Color.BLUE);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new test();
}
});
}
}
JCheckBox
有三个复选框按钮,分别是“红色”、“绿色”和“蓝色”,选中某个或某些按钮后,面板的背景色变为相应的颜色。要求考虑色彩的组合效果,例如三个复选框都选中时显示白色,红色和绿色选中时显示黄色
package chapt2;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class test extends JFrame implements ActionListener,ItemListener{
JPanel pnlHead,pnlBody;
JCheckBox r1,r2,r3;
test(){
setSize(300,200);
setDefaultCloseOperation(EXIT_ON_CLOSE);
JPanel pane = new JPanel();
add(pane);
pane.setLayout(new BorderLayout());
pnlHead = new JPanel();
pnlBody = new JPanel();
pnlBody.setBackground(Color.black);
r1 = new JCheckBox("红色");
r2 = new JCheckBox("绿色");
r3 = new JCheckBox("蓝色");
pnlHead.add(r1); pnlHead.add(r2); pnlHead.add(r3);
pane.add(pnlHead,BorderLayout.NORTH);
pane.add(pnlBody,BorderLayout.CENTER);
r1.addItemListener(this);
r2.addItemListener(this);
r3.addItemListener(this);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
}
@Override
public void itemStateChanged(ItemEvent e) {
int r = 0,g = 0,b = 0;
if(r1.isSelected())r = 255;
if(r2.isSelected())g = 255;
if(r3.isSelected())b = 255;
pnlBody.setBackground(new Color(r,g,b));
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new test();
}
});
}
}
JComboBox
下拉列表的特点是将多个选项折叠在一起,只显示最前面的或被选中的一个。选择时需要单击下拉列表右边的下三角按钮,这时候会弹出包含所有选项的列表。用户可以在列表中进行选择,也可以根据需要直接输入所要的选项,还可以输入选项中没有的内容。
下拉列表由 JComboBox 类实现,常用构造方法如下。
- JComboBox():创建一个空的 JComboBox 对象。
- JComboBox(ComboBoxModel aModel):创建一个 JComboBox,其选项取自现有的 ComboBoxModel。
- JComboBox(Object[] items):创建包含指定数组中元素的 JComboBox。
JComboBox 能够响应 ItemEvent 事件和 ActionEvent 事件,其中 ItemEvent 触发的时机是当下拉列表框中的所选项更改时,ActionEvent 触发的时机是当用户在 JComboBox 上直接输入选择项并回车时。要处理这两个事件,需要创建相应的事件类并实现 ItemListener 接口和 ActionListener 接口。
package chapt2;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class test extends JFrame implements ActionListener{
JLabel lbl = new JLabel("证件类型");
JComboBox cmb = new JComboBox();
test(){
setSize(300,200);
setDefaultCloseOperation(EXIT_ON_CLOSE);
JPanel pane = new JPanel();
add(pane);
cmb.addItem("--请选择--");
cmb.addItem("身份证");
cmb.addItem("驾驶证");
cmb.addItem("军官证");
pane.add(lbl);
pane.add(cmb);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new test();
}
});
}
}
JLabel lbl = new JLabel("证件类型");
JComboBox cmb;
String[] items = {"--请选择--","身份证","驾驶证","军官证"};
test(){
setSize(300,200);
setDefaultCloseOperation(EXIT_ON_CLOSE);
JPanel pane = new JPanel();
add(pane);
cmb = new JComboBox(items);
pane.add(lbl);
pane.add(cmb);
setVisible(true);
}
组合框表示字号,在组合框中选择或输入一个字号后,标签“Java语言”会随之改变字号的大小
package chapt2;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class test extends JFrame implements ActionListener,ItemListener{
JLabel lbl = new JLabel("字体大小");
JComboBox cmb;
String[] items = {"10","12","14","18","24","32","48"};
test(){
setSize(300,200);
setDefaultCloseOperation(EXIT_ON_CLOSE);
JPanel pane = new JPanel();
add(pane);
cmb = new JComboBox(items);
cmb.addItemListener(this);
pane.add(cmb); pane.add(lbl);
setVisible(true);
}
@Override
public void itemStateChanged(ItemEvent e) {
Font font = lbl.getFont();
font = new Font(font.getName(),font.getStyle(),Integer.parseInt((String)cmb.getSelectedItem()));
lbl.setFont(font);
}
@Override
public void actionPerformed(ActionEvent e) {
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new test();
}
});
}
}
例:窗口中包含组合框、文本框、两个按钮。要求:
1)单击组合框中某一选项后,文本框中显示该选项。
2)如果单击“删除”按钮,则删除该选项。
3)在文本框中输入一个字符串,点击“添加”按钮,可将该字符串作为选项添加到组合框中。
package chapt2;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class test extends JFrame implements ActionListener,ItemListener{
JPanel head,body;
JComboBox cmb;
String[] items = {"未选择","北京","上海","广州","深圳"};
JTextField txt;
JButton add,del;
test(){
setSize(300,200);
setDefaultCloseOperation(EXIT_ON_CLOSE);
JPanel pane = new JPanel(new BorderLayout());
add(pane);
head = new JPanel();
body = new JPanel();
cmb = new JComboBox(items);
cmb.addItemListener(this);
txt = new JTextField(10);
head.add(cmb); head.add(txt);
add = new JButton("Add");
del = new JButton("Del");
body.add(add); body.add(del);
add.addActionListener(this);
del.addActionListener(this);
pane.add(head,BorderLayout.NORTH);
pane.add(body,BorderLayout.CENTER);
setVisible(true);
}
@Override
public void itemStateChanged(ItemEvent e) {
txt.setText(cmb.getSelectedItem().toString());
}
@Override
public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand();
if(cmd.equals("Add")){
cmb.addItem(txt.getText());
}else{
cmb.removeItemAt(cmb.getSelectedIndex());
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new test();
}
});
}
}
JList
列表框与下拉列表的区别不仅仅表现在外观上,当激活下拉列表时,会出现下拉列表框中的内容。但列表框只是在窗体系上占据固定的大小,如果需要列表框具有滚动效果,可以将列表框放到滚动面板中。当用户选择列表框中的某一项时,按住 Shift 键并选择列表框中的其他项目,可以连续选择两个选项之间的所有项目,也可以按住 Ctrl 键选择多个项目。
Swing 中使用 JList 类来表示列表框,该类的常用构造方法如下。
- JList():构造一个空的只读模型的列表框。
- JList(ListModel dataModel):根据指定的非 null 模型对象构造一个显示元素的列表框。
- JList(Object[] listData):使用 listData 指定的元素构造—个列表框。
- JList(Vector<?> listData):使用 listData 指定的元素构造一个列表框。
上述的第一个构造方法没有参数,使用此方法创建列表框后可以使用 setListData() 方法对列表框的元素进行填充,也可以调用其他形式的构造方法在初始化时对列表框的元素进行填充。常用的元素类型有 3 种,分别是数组、Vector 对象和 ListModel 模型。
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ListSelectionModel;
import javax.swing.border.EmptyBorder;
public class JListDemo extends JFrame
{
public JListDemo()
{
setTitle("Java列表框组件示例");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置窗体退出时操作
setBounds(100,100,300,200); //设置窗体位置和大小
JPanel contentPane=new JPanel(); //创建内容面板
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); //设置面板的边框
contentPane.setLayout(new BorderLayout(0, 0)); //设置内容面板为边界布局
setContentPane(contentPane); //应用内容面板
JScrollPane scrollPane=new JScrollPane(); //创建滚动面板
contentPane.add(scrollPane,BorderLayout.CENTER); //将面板增加到边界布局中央
JList list=new JList();
//限制只能选择一个元素
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
scrollPane.setViewportView(list); //在滚动面板中显示列表
String[] listData=new String[12]; //创建一个含有12个元素的数组
for (int i=0;i<listData.length;i++)
{
listData[i]="这是列表框的第"+(i+1)+"个元素~"; //为数组中各个元素赋值
}
list.setListData(listData); //为列表填充数据
}
public static void main(String[] args)
{
JListDemo frame=new JListDemo();
frame.setVisible(true);
}
}
JDialog
对话框通常用作从用户处接收附加信息,或者提供发生了某种事件的通知。Java 提供了 JOptionPane 类,用来创建标准对话框,也可以通过扩展 JDialog 类创建自定义的对话框。JOptionPane 类可以用来创建 4 种类型的标准对话框:确认对话框、消息对话框、输入对话框和选项对话框。
当用户单击框架中的按钮时,显示一个对话框。
对话框中包含一个标签组件。
package chapt2;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class test extends JFrame implements ActionListener{
JButton showDialog = new JButton("showDialog");
JDialog dialog = new JDialog(this,"对话框",true);
test(){
setSize(300,200);
setDefaultCloseOperation(EXIT_ON_CLOSE);
JPanel pane = new JPanel(new BorderLayout());
add(pane);
pane.add(showDialog);
showDialog.addActionListener(this);
dialog.setSize(200,100);
dialog.setLocationRelativeTo(null);
dialog.add(new JLabel("test"));
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource() == showDialog){
dialog.setVisible(true);
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new test();
}
});
}
}
JOptionPane
For more please reading:http://c.biancheng.net/view/1256.html
JColorChooser (不考
JMenuBar & JMenu & JMenuItem (不考
菜单由 Swing 中的 JMenu 类实现,可以包含多个菜单项和带分隔符的菜单。在菜单中,菜单项由 JMenuItem 类表示,分隔符由 JSeparator 类表示。
菜单本质上是带有关联 JPopupMenu 的按钮。当按下“按钮”时,就会显示 JPopupMenu。如果“按钮”位于 JMenuBar 上,则该菜单为顶层窗口。如果“按钮”是另一个菜单项,则 JPopupMenu 就是“下拉”菜单。
For more:http://c.biancheng.net/view/1245.html
JFileChooser
文件选择器为用户能够操作系统文件提供了桥梁。swing 中使用 JFileChooser 类实现文件选择器,该类常用的构造方法如下。
- JFileChooser():创建一个指向用户默认目录的 JFileChooser。
- JFileChooser(File currentDirectory):使用指定 File 作为路径来创建 JFileChooser。
- JFileChooser(String currentDirectoryPath):创建一个使用指定路径的 JFileChooser。
- JFileChooser(String currentDirectoryPath, FileSystemView fsv):使用指定的当前目录路径和 FileSystem View 构造一个 JFileChooser。
JFileChooser 类的常用方法如下所示。
- int showOpenDialog(Component parent):弹出打开文件对话框。
- int showSaveDialog(Component parent):弹出保存文件对话框。
java实现文件选择器:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class JFileChooserDemo
{
private JLabel label=new JLabel("所选文件路径:");
private JTextField jtf=new JTextField(25);
private JButton button=new JButton("浏览");
public JFileChooserDemo()
{
JFrame jf=new JFrame("文件选择器");
JPanel panel=new JPanel();
panel.add(label);
panel.add(jtf);
panel.add(button);
jf.add(panel);
jf.pack(); //自动调整大小
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
button.addActionListener(new MyActionListener()); //监听按钮事件
}
//Action事件处理
class MyActionListener implements ActionListener
{
@Override
public void actionPerformed(ActionEvent arg0)
{
JFileChooser fc=new JFileChooser("F:\\");
int val=fc.showOpenDialog(null); //文件打开对话框
if(val==fc.APPROVE_OPTION)
{
//正常选择文件
jtf.setText(fc.getSelectedFile().toString());
}
else
{
//未正常选择文件,如选择取消按钮
jtf.setText("未选择文件");
}
}
}
public static void main(String[] args)
{
new JFileChooserDemo();
}
}
JTable
import javax.swing.*;
import java.awt.event.*;
class table {
public static void main(String args[]){
Object data[][]={{"陈峰","男",new Integer(19),"党员"}, //表格中的数据
{"田一飞","男",new Integer(18),"团员"},
{"胡锦","女",new Integer(19),"党员"}};
String columnName[]={"姓名","性别","年龄","政治面貌"}; //表格的列标题
JTable table=new JTable(data,columnName); //创建表格
table.setRowHeight(25); //设置行高
JScrollPane pane=new JScrollPane(table); //添加滚动条
JFrame f=new JFrame();
f.setSize(300,200);
f.add(pane);
f.setVisible(true);
}
}
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
class table implements ListSelectionListener {
JFrame frame;
JTable table;
DefaultTableModel tableModel;
JScrollPane scrollpane;
table() {
frame = new JFrame();
String columnName[] = { "姓名", "性别", "年龄" };
Object data[][] = { { "陈杨", "男", 19}, { "王铮", "男", 18},
{ "李妍", "女", 19} };
tableModel = new DefaultTableModel(data, columnName);
table = new JTable(tableModel);
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
scrollpane = new JScrollPane(table);
frame.add(scrollpane);
frame.setSize(260, 150);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 注册监听器
table.getSelectionModel().addListSelectionListener(this);
}
public void valueChanged(ListSelectionEvent e) {
// 获取被选中行的索引
int selectedRow = table.getSelectedRow();
// 输出被选中行的数据
for (int i = 0; i < table.getColumnCount(); i++){
System.out.print( table.getValueAt(selectedRow, i) + "\t");
System.out.println();
}
}
public static void main(String args[]) {
new table();
}
}
关于鼠标点击输出两次:(这里是鼠标按下触发一次,鼠标松开也触发一次)官方不认为这是一个bug
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;
public class table extends JFrame
{
private JPanel contentPane;
private JTable table;
public static void main(String[] args)
{
table frame = new table();
}
public table()
{
addWindowListener(new WindowAdapter(){
@Override
public void windowActivated(WindowEvent e){do_this_windowActivated(e);}
});
setTitle("图书信息表");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100,100,450,200);
contentPane=new JPanel();
contentPane.setBorder(new EmptyBorder(5,5,5,5));
contentPane.setLayout(new BorderLayout(0,0));
setContentPane(contentPane);
JPanel panel=new JPanel();
contentPane.add(panel,BorderLayout.SOUTH);
JButton button=new JButton("删除");
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){do_button_actionPerformed(e);}
});
panel.add(button);
JScrollPane scrollPane=new JScrollPane();
contentPane.add(scrollPane,BorderLayout.CENTER);
table=new JTable();
table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
scrollPane.setViewportView(table);
setVisible(true);
}
protected void do_this_windowActivated(WindowEvent e)
{
DefaultTableModel tableModel=(DefaultTableModel) table.getModel(); //获得表格模型
tableModel.setRowCount(0); //清空表格中的数据
tableModel.setColumnIdentifiers(new Object[]{"书名","出版社","出版时间","丛书类别","定价"}); //设置表头
tableModel.addRow(new Object[]{"Java从入门到精通(第2版)","清华大学出版社","2010-07-01","软件工程师入门丛书","59.8元"}); //增加列
tableModel.addRow(new Object[]{"PHP从入门到精通(第2版)","清华大学出版社","2010-07-01","软件工程师入门丛书","69.8元"});
tableModel.addRow(new Object[]{"Visual Basic从入门到精通(第2版)","清华大学出版社","2010-07-01","软件工程师入门丛书","69.8元"});
tableModel.addRow(new Object[]{"Visual C++从入门到精通(第2版)","清华大学出版社","2010-07-01","软件工程师入门丛书","69.8元" });
table.setRowHeight(30);
table.setModel(tableModel); //应用表格模型
}
protected void do_button_actionPerformed(ActionEvent e)
{
DefaultTableModel model=(DefaultTableModel) table.getModel(); //获得表格模型
int[] selectedRows=table.getSelectedRows();
for(int i=0;i<selectedRows.length;i++)model.removeRow(selectedRows[i]);
table.setModel(model);
}
}
单击“添加行”按钮,从控制台输入一行新的数据,然后将其添加到表格中。
选中某一行,单击“删除行”按钮,弹出确认对话框,确认后再删除
package chapt2;
import java.awt.*;
import java.awt.event.*;
import java.util.Scanner;
import java.util.Vector;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import com.hxtt.b.bl;
public class test extends JFrame implements ActionListener{
JTable table;
JScrollPane scroll;
JPanel foot;
String[] columns = {"姓名","性别","年龄","政治面貌"};
Object[][] data = {
{"张三","男",18,"党员"},
{"李四","男",18,"党员"},
{"王五","男",18,"党员"},
{"麻六","男",18,"党员"}
};
DefaultTableModel tableModel = new DefaultTableModel(data,columns);
JButton btnAdd,btnDel;
test(){
setSize(400,200);
setDefaultCloseOperation(EXIT_ON_CLOSE);
JPanel pane = new JPanel(new BorderLayout());
add(pane);
table = new JTable(tableModel);
table.setRowHeight(30);
scroll = new JScrollPane();
scroll.setViewportView(table);
pane.add(scroll,BorderLayout.CENTER);
foot = new JPanel();
btnAdd = new JButton("Add");
btnDel = new JButton("Del");
btnAdd.addActionListener(this);
btnDel.addActionListener(this);
foot.add(btnAdd); foot.add(btnDel);
pane.add(foot,BorderLayout.SOUTH);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
JButton btn = (JButton)e.getSource();
if(btn==btnAdd){
System.out.print("请依次输入要添加的数据(用空格隔开):");
Scanner sc = new Scanner(System.in);
Vector row = new Vector();
for(int i=0;i<table.getColumnCount();i++)
row.add(sc.next());
tableModel.addRow(row);
table.setModel(tableModel);
}else{
int selectdRow = table.getSelectedRow();
int ret = JOptionPane.showConfirmDialog(null,"确定要删除吗?","删除提示", JOptionPane.OK_CANCEL_OPTION);
if(ret == JOptionPane.OK_OPTION){
tableModel.removeRow(selectdRow);
}
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new test();
}
});
}
}
读取数据库中的数据显示到JTable里
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
import java.sql.*;
import java.util.Vector;
public class table {
JFrame f;
JTable table;
DefaultTableModel tableModel;
Vector vdata=new Vector();
Vector vcolumn=new Vector();
public static void main(String[] args) throws Exception {
table um=new table();
}
table() throws Exception{
Class.forName("com.hxtt.sql.access.AccessDriver");
String url = "jdbc:Access:///f:/user.mdb";
Connection conn =DriverManager.getConnection(url, "", "");
Statement stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery("select * from user");
vcolumn.add("用户名"); vcolumn.add("密码");
while(rs.next()){
Vector vrow=new Vector();
vrow.add(rs.getString(1));
vrow.add(rs.getString(2));
vdata.add(vrow);
}
tableModel=new DefaultTableModel(vdata,vcolumn);
table=new JTable(tableModel);
JScrollPane sp=new JScrollPane(table);
f=new JFrame();
f.setSize(300,200); f.add(sp);
f.setVisible(true);
}
}