下面内容转载自qq_27862695
一:JAVA SWING 基本组件
1 .简介
Swing是一个用于开发Java应用程序用户界面的开发工具包,是由纯Java实现的。以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格,不依赖操作系统的支持,这是它与AWT组件的最大区别。Swing开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。
2 .Swing的层次结构
3 .Swing容器
Swing容器分为三个:顶层容器、通用容器和专用容器。
3.1 顶层容器
顶层容器可以独立存在,包括JFrame、JDialog、JApplet、JWindow(JDialog不可以独立存在)。
JFrame是大多数应用程序的基本窗口,有边框、标题和按钮,允许程序员把其他组件添加到它里面,把它们组织起来,并把它们呈现给用户。
JDialog对话框。在Swing中,有两个对话框类,它们是JDialog类和JOptionPane类。JDialog类提供构造并管理通用对话框,作为对话框的基类。对话框与一般窗口不同,对话框依赖其他窗口,当它所依赖的窗口消失或最小化时,对话框也将消失;窗口还原时,对话框又会自动恢复。JDialog对象也是一种容器,因此也可以给JDialog对话框指派布局管理器,对话框的默认布局为BoarderLayout布局。但组件不能直接加到对话框中,对话框也包含一个内容面板,应当把组件加到JDialog对象的内容面板中。由于对话框依赖窗口,因此要建立对话框,必须先要创建一个窗口。JDialog的构造方法有很多,这里列举最具代表性的一个,JDialog(JFrame f,String s,boolean b),构造一个标题为s,初始化不可见的对话框。参数f设置对话框所依赖的窗口,参数b决定对话框是否强制或非强制型,强制意味着禁止其他窗口输入。JOptionPane类给一些常见的对话框提供许多便于使用的选项,例如下所示
JApplet是一种特殊的Java程序经过编译后可以被嵌入到HTML中,在浏览器内显示一个小程序界面。
JWindow没有边框标题和按钮,用作应用程序的启动画面。
3.2 中间容器
中间容器不能独立存在,必须放在顶层容器内,且能够容纳其他控件,包括JPanel、JScrollPane、JToolBar、JSplitPane、JTabbedPane。用法都是New出对应的面板,可以向其中添加组件,之后放到JFrame中即可,这里不再做一一截图。
JPanel:最普通的面板,没有特殊功能,主要用来容纳其它控件。
JScrollPane:滚动面板,即带有长宽滚动条,主要用来容纳大型控件。
JToolBar:工具栏面板,包含图标按钮。可以在程序的主窗口之外浮动或是托拽。
JSplitPane:分割式面板。
JTabbedPane:选项卡面板。
3.3 特殊容器
特殊容器其实就是中间容器的一种,只不过它在图形上个更加能够起到美化和专业化的作用。包括JInternalFrame,JLayeredPane,JRootPane等。
JinternalFrame的使用跟JFrame几乎一样,可以最大化、最小化、关闭窗口、加入菜单等功能;唯一不同的是JinternalFrame JInternalFrame不能单独出现,必须依附在最上层组件上。
JLayeredPane:分层窗口,允许组件在需要时互相重叠。
4 .Swing基本组件
继承自JComponent的组件都是swing的基本组件,它们有一些通用的方法,如设置边框、背景颜色等。组件大致分为按钮、文本组件、不可编辑显示组件、菜单、其他组件。
按钮:JButton(常规按钮)、JCheckBox(复选框)、JRadioButton(单选按钮)。
文本组件:JTextField(文本字段)、JPasswoordField(密码框)、JTextArea(纯文本)。
不可编辑显示组件:JLabel(显示不可编辑文本)、JToolTip(显示不可编辑文本)、JProgreesBar(进度条)。
菜单:JMenu(普通菜单)、JPopupMenu(弹出式菜单)。
其他组件:JFileChooser(文件选择器)、JColorChooser(颜色选择器)、JTable(表格)、JTree(树)、JComboBox(下拉框)等等。
组件
标签
JLabel
画板
BufferedImage
表单
文本框
JTextField
密码框
JPasswordField
文本域
JTextArea
复选框
JCheckBox
单选按钮
JRadioButton
下拉列表
JComboBox
滚动条
JScrollPane
菜单栏
JMenuBar
JFrame属性:
//4. 设置窗体属性
this.setTitle("演示流布局管理器");//设置标题
this.setSize(200, 200); //设置
this.setLocation(200, 200); //设置窗体出现的位置
this.setVisible(true); //设置窗体可见
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置窗体关闭的同时关闭jvm
this.setResizable(false); //Resizable:可调整大小的,设置窗体大小不可变
二:JAVA SWING 布局
1.边界布局管理器(FlowLayout)
this.add(jButton, BorderLayout.CENTER); //布局的中间// this.add(jButton2, BorderLayout.NORTH);//布局的北边// this.add(jButton3, BorderLayout.WEST);//布局的西边
this.add(jButton4, BorderLayout.EAST); //布局的东边
this.add(jButton5, BorderLayout.SOUTH); //布局的南边
效果为:
2.流布局管理器(FlowLayout)
//3. 添加各个组件
this.add(jButton1); this.add(jButton2); this.add(jButton3); this.add(jButton4); this.add(jButton5); //设置流布局 //this.setLayout(new FlowLayout());//默认布局方式为居中
this.setLayout(newFlowLayout(FlowLayout.LEFT));
3.网格布局管理器(GridLayout)
//创建组件
for(int i = 0; i){
jButton[i] = new JButton(String.valueOf(i+1));
}
//添加组件
for(int i = 0; i){
this.add(jButton[i]);} //
设置网格布局
this.setLayout(
new GridLayout(3, 3, 10, 30
));
效果为:
4.null
null:空布局(不使用任何布局)
容器不使用任何一个布局添加组件则通过绝对定位方式添加(通过坐标定位
5.卡片布局
JFrame frame = newJFrame("卡片管理") ;
CardLayout card = newCardLayout() ;
frame.setLayout(card) ;
Container con = frame.getContentPane() ;
con.add(newJLabel("候选人一号",JLabel.CENTER),"first") ;
con.add(newJLabel("候选人二号",JLabel.CENTER),"second") ;
con.add(newJLabel("候选人三号",JLabel.CENTER),"third") ;
con.add(newJLabel("候选人四号",JLabel.CENTER),"fourth") ;
con.add(newJLabel("候选人五号",JLabel.CENTER),"fifth") ;
frame.pack(); //这个函数的作用就是根据窗口里面的布局及组件的preferedSize来确定frame的最佳大小。
frame.setVisible(true) ;
card.show(con,"third") ;//展示第三个
效果图:
三.SWING 事件管理
1.首先这个类要实现ActionListener接口
public class TestChange implements ActionListener {
2.添加事件方法
方法一:
private void addEventHandler(){
jb.addActionListener(this);
}
方法二:
private void addEventHandler(){
jb1.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("+");
jl.setText(++count+" ");
}
});
jb2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("-");
jl.setText(--count+" ");
}
});
}
3.重写方法actionPerformed(ActionEvent e)
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("TestChange.actionPerformed()");
//获得文本框中的数据
String s1=jtf1.getText();
String s2=jtf2.getText();
System.out.println(s1);
System.out.println(s2);
//设置文本框中的数据
jtf1.setText(s2);
jtf2.setText(s1);
}
整个项目源代码:
package www9m3;
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.JTextField;
//可以运行,但是没有运行没有结果???
public class TestChange implements ActionListener {
private JFrame jf;
private JTextField jtf1;
private JTextField jtf2;
private JButton jb;
public TestChange() {
jf=new JFrame();
jtf1=new JTextField(10);
jtf2=new JTextField(10);
jb=new JButton("交换");
}
private void init(){
jf.setLayout(new FlowLayout());
jf.add(jtf1);
jf.add(jtf2);
jf.add(jb);
}
private void addEventHandler(){
jb.addActionListener(this);
}
public void show(){
init();
addEventHandler();
jf.pack();
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new TestChange().show();
}
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("TestChange.actionPerformed()");
//获得文本框中的数据
String s1=jtf1.getText();
String s2=jtf2.getText();
System.out.println(s1);
System.out.println(s2);
//设置文本框中的数据
jtf1.setText(s2);
jtf2.setText(s1);
}
}
几种基本组件的使用案例:文本框,密码框,文本域,复选框,单选按钮,下拉列表
package www9m12;
import java.awt.FlowLayout;
import javax.swing.ButtonGroup;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPasswordField;
import javax.swing.JRadioButton;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class TestForm {
public static void main(String[] args) {
JFrame jf=new JFrame();
jf.setLayout(new FlowLayout());
//文本框
JTextField jtf=new JTextField(10);
jf.add(jtf);
//密码框
JPasswordField jpf=new JPasswordField(10);
jpf.setEchoChar('啊');
jf.add(jpf);
//文本域
JTextArea jta=new JTextArea(15,30);
JScrollPane jsp=new JScrollPane(jta);
jf.add(jsp);
//复选框
JCheckBox jcb1=new JCheckBox("aaa");
JCheckBox jcb2=new JCheckBox("bbb");
JCheckBox jcb3=new JCheckBox("ccc");
jf.add(jcb1);
jf.add(jcb2);
jf.add(jcb3);
//单选按钮
JRadioButton jrb1=new JRadioButton("aaa");
JRadioButton jrb2=new JRadioButton("bbb");
ButtonGroup bg=new ButtonGroup();
bg.add(jrb1);
bg.add(jrb2);
jf.add(jrb1);
jf.add(jrb2);
//下拉列表
JComboBox jcb=new JComboBox();
String[] items={"---请选择---","aaa","bbb","ccc"};
for (String item : items) {
jcb.addItem(item);
}
jf.add(jcb);
jf.pack();
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}