1.常用Swing组件介绍
1.1标签
JLable组件被称为标签,它是一个静态组件,也是标准组件中最简单的一个组件。标签只起信息说明的作用,而不接收用户的输入,也无时间响应,其常用的构造方法如JLanle()。
1.2文本组件
文本组件是显示信息和提供用户输入文本信息的主要工具。
(1)文本框JTextField的应用
功能实现:实现在第一个文本框中输入一个正整数,在第二个文本框内输入n,按回车键把该数的n次方的值在第三个文本框上显示出来。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
@SuppressWarnings("serial")
public class JTextFieldDemo extends JFrame implements ActionListener{
JTextField tf1,tf2,tf3;
public JTextFieldDemo(){
// TODO Auto-generated constructor stub
Container container=this.getContentPane();
container.setLayout(new FlowLayout(FlowLayout.LEFT));
JLabel lb1=new JLabel("请输入一个数: ");
JLabel lb2=new JLabel("请输入n: ");
JLabel lb3=new JLabel("该数的n次方等于:");
tf1=new JTextField(10);
tf2=new JTextField(10);
tf3=new JTextField(10);
container.add(lb1);
container.add(tf1);
container.add(lb2);
container.add(tf2);
container.add(lb3);
container.add(tf3);
tf1.addActionListener(this);//----为文本框注册ActionEvent事件监听器(this只当前类,调用监听器事件的方法)
tf2.addActionListener(this);
this.addWindowListener(new WindowAdapter() {//为窗口注册事件监听程序,监听器以匿名类的形式进行
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
this.setTitle("文本框应用");
this.setSize(300, 450);
this.setVisible(true);
}
public void actionPerformed(ActionEvent e){
int n=Integer.parseInt(tf1.getText());
int s=Integer.parseInt(tf2.getText());
long x=(long) Math.pow(n, s);
tf3.setText(String.valueOf(x));//将整形转换为字符串以修改文本框输出的内容
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new JTextFieldDemo();
}
}
(2)文本域
JTextArea被称为文本域,与文本框的的主要区别是:文本框只能输入/输出一行文本,而文本与能输入/输出多行文本。一般将其放入滚动窗格JScorllPane中。
(3)密码框
JPasswordField组件实现一个密码框,用来接收用户输入的单行文本信息,在密码框中不显示用户输入的真实信息。
1.3按钮组件
(1)命令按钮
JButton是最常用、最简单的按钮,按钮可分为有无标签和有无图标几种情况。
应用:命令按钮和文本域的使用
功能实现:实现两个文本域内容的拷贝,当按下复制命令按钮时,如果对第一个文本域内容有选择,把选择的内容追加到第二个文本域后面,没有选择时把第一个文本域的所有内容追加到第二个文本域后面。当单击清除按钮时,清空第二个文本域的内容,单击reset按钮清空两个文本域里的所有内容。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
@SuppressWarnings("serial")
public class JButtonJTextAreaDemo extends JFrame{
private JTextArea ta1,ta2;
private JButton bt1,bt2,bt3;
public JButtonJTextAreaDemo() {
// TODO Auto-generated constructor stub
@SuppressWarnings("unused")
Container container=this .getContentPane();
ta1=new JTextArea(5,16);//创建文本框最多显示3行,每行15个字,超过范围以滚动条浏览
ta1.setSelectedTextColor(Color.blue);
ta2=new JTextArea(5,16);
ta2.setEditable(false);
//创建显示指定组件内容的JScrollPane,水平和垂直滚动条被显示出来
JScrollPane scrollpane1=new JScrollPane(ta1,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
JScrollPane scrollpane2=new JScrollPane(ta2,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
bt1=new JButton("复制");
bt2=new JButton("清除");
bt3=new JButton("重置");
bt1.addActionListener(new ActionLis());
bt2.addActionListener(new ActionLis());
bt3.addActionListener(new ActionLis());
JPanel p1=new JPanel();
p1.add(scrollpane1);
p1.add(bt1);
JPanel p2=new JPanel();
p2.add(scrollpane2);
p2.add(bt2);
JPanel p3=new JPanel();
p3.add(bt3);
container.add(p1,BorderLayout.NORTH);
container.add(p3,BorderLayout.CENTER);
container.add(p2,BorderLayout.SOUTH);
this.addWindowListener(new WindowAdapter(){//为窗口注册窗口事件监听程序,监听器为匿名内部类的形式
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
this.setTitle("文本内容的复制");
this.setSize(600,450);
this.setVisible(true);
}
class ActionLis implements ActionListener{
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
if(arg0.getSource()==bt1){
if(ta1.getSelectedText()!=null)
ta2.append(ta1.getSelectedText()+"\n");//把选中的内容复制添加到第二个文本域中
else
ta2.append(ta1.getText()+"\n");//把第一个文本域中的内容全部添加到第二个文本域中
}else if(arg0.getSource()==bt2)
ta2.setText(" "); //如果单击清除按钮,清空第二个文本域的内容
else{
ta1.setText(" ");//如果单击reset清空两个文本域里的所有内容
ta2.setText(" ");
}
}
}
public static void main(String[] args) {
new JButtonJTextAreaDemo();
}
}
(3)JTable表格的应用:
功能实现:写一个登录窗口,点击登录后跳转到一个表格。
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
@SuppressWarnings("serial")
public class LoginWindow extends JFrame implements ActionListener{
JLabel lab1,lab2,lab3;
JButton bt1,bt2;
JTextField tf1;
JPasswordField pwf;
JPanel pa;
public LoginWindow() {
// TODO Auto-generated constructor stub
lab1=new JLabel("登录窗口");
lab2=new JLabel("账号:");
tf1=new JTextField(8);
lab3=new JLabel("密码:");
pwf=new JPasswordField(6);
bt1=new JButton("登录");
bt2=new JButton("退出");
lab1.setBounds(300, 10, 200, 200);
lab2.setBounds(140, 150, 100, 50);
lab3.setBounds(140, 250, 100, 50);
tf1.setBounds(180, 150, 300, 50);
pwf.setBounds(180, 250, 300, 50);
bt1.setBounds(180, 350, 100, 50);
bt2.setBounds(380, 350, 100, 50);
this.add(lab1);
this.add(lab2);
this.add(lab3);
this.add(tf1);
this.add(pwf);
this.add(bt1);
this.add(bt2);
this.setTitle("欢迎来到登录窗口");
this.setBounds(600,300,600,600);
this.setLayout(null);
this.setResizable(true);
this.setVisible(true);
bt1.addActionListener(this);
bt2.addActionListener(this);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource()==bt1)
{
String zh=tf1.getText();
char[] psword=pwf.getPassword();
String ps=new String(psword);//将字符转换为字符串
if(zh!=null&&ps!=null)
{
if(zh.equals("admin")&&ps.equals("123456"))
{
JOptionPane.showMessageDialog(null,"登录成功");
new JTableDemo();
setVisible(false);
}
else{
JOptionPane.showMessageDialog(null,"账号或密码输入错误,请重输入");
tf1.setText(" ");
pwf.setText(null);
}
}else{
JOptionPane.showMessageDialog(null,"请输入账号或密码");
}
}else if(e.getSource()==bt2)
{
dispose();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new LoginWindow();
}
}
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.*;
@SuppressWarnings("serial")
public class JTableDemo extends JFrame{
JTable stuTable;
public JTableDemo(){
// TODO Auto-generated constructor stub
Object stuinf[][]={{"20000101","张三","18","计算机"},{"20010102","李四","19","网络安全"}};
Object head[]={"学号","姓名","年龄","专业"};
stuTable=new JTable(stuinf,head); //以数组形式生成表格
stuTable.setEnabled(true);//设置表格可编辑
stuTable.setPreferredScrollableViewportSize(new Dimension(0,120));
JScrollPane jsp=new JScrollPane();
jsp.setViewportView(stuTable);
jsp.setBorder(BorderFactory.createTitledBorder("学生信息"));
add(BorderLayout.CENTER,jsp);//添加到内容格窗上
validate();//刷新窗口
this.setTitle("JTable表格演示程序");
this.setSize(600,450);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}