Swing:Java中开发图形用户界面的包,支持GUI程序开发的包: javax.swing
GUI:图形用户界面(视窗界面,代表:桌面应用程序)
GUI三个层次:界面、控件、渲染
-使用的类:javax.swing.JFrame、JWindow、JDialog
javax.swing.JFrame:最常见的界面
javax.swing.JWindow:不含标题栏的界面
javax.swing.HDialog:对话框
最常见的:JFrame
案例:在桌面显示一个JFrame
package customer;
import javax.swing.*;
class Test extends JFrame{
public Test()
{
super("第一个界面");
this.setSize(500,300);
this.setLocation(200,200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关掉之后会自动消失
this.setVisible(true);
}
public static void main (String[] args) throws Exception{
new Test();
}
}
子容器(面板)、按钮、文本框、下拉菜单、静态文本…
- 面板:javax.swing.JPanel 容纳控件,更好的布局
一般情况:界面上添加面板,面板上添加控件- 按钮:javax.swing.JButton
- 文本框:javax.swing.JTextField
- 界面静态文本:javax.swing.JLabel
- 密码框: javax.swing.JPasswordField
- 下拉菜单:javax.swing.JComboBox
- 单选按钮:JRadioButton
- 复选框 :JCheckBox
- 多行文本框:JTextArea
- 菜单 :JMenuBar /JMenu /JMenuItem
- …
- 看文档、看构造函数、面板上添加控件!
import javax.swing.*;
class TestFrame extends JFrame{
private JPanel jpl = new JPanel();
private JButton jbt = new JButton("注册新用户");
private JLabel jlb = new JLabel("输入您的姓名");
private JTextField jtf = new JTextField(10);
private JComboBox jcb = new JComboBox();
public TestFrame(){
this.add(jpl);
jpl.add(jbt); jpl.add(jlb); jpl.add(jtf);
jpl.add(jcb); jcb.addItem("男") ; jcb.addItem("女");
this.setSize(300,600);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public static void main (String[] args) {
TestFrame tf = new TestFrame();
}
}
package customer;
import javax.swing.*;
import java.awt.*;
class Test extends JFrame{
private JPanel jpl = new JPanel();
private JButton jbt = new JButton("注册新用户");
public Test(){
this.add(jpl);
jpl.add(jbt);
Icon icon = new ImageIcon("img.jpg");
jbt.setIcon(icon);
this.setSize(300,600);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public static void main (String[] args) {
Test tf = new Test();
}
}
一般情况下,面板上的控件,是优先从上到下放置,一行放不下就到下一行,这叫流式布局
可以采用坐标布局法
每个控件位置由它的左上角坐标(setLocation)和宽度高度来确定
前提:将面板的布局设置为空
- 颜色
- 界面和控件都可以设置背景颜色和前景颜色
- 前景颜色主要是控件上文字的颜色
- setBackground设置背景颜色;setForeground设置前景颜色
案例:将按钮背景设置蓝色,前景设置黄色
package customer;
import javax.swing.*;
import java.awt.*;
import javax.swing.*;
import java.awt.*;
class Test extends JFrame{
private JPanel jpl = new JPanel();
private JButton jbt = new JButton("注册新用户");
public Test(){
this.add(jpl);
jpl.add(jbt);
jpl.setBackground(new Color(200, 200, 200));
jbt.setBackground(Color.BLUE);
jbt.setForeground(Color.YELLOW);
this.setSize(300,600);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public static void main (String[] args) {
Test tf = new Test();
}
}
- 字体
- 有文字的控件,都可以设置字体,用setFont函数
案例:将文本框文字设置大一些
import javax.swing.*;
import java.awt.*;
class TestFrame extends JFrame{
private JPanel jpl = new JPanel();
private JTextField jtf = new JTextField(10);
public TestFrame(){
this.add(jpl);
jpl.add(jtf);
Font f = new Font("黑体", Font.BOLD, 200);
jtf.setFont(f);
this.setSize(300,600);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public static void main (String[] args) {
TestFrame tf = new TestFrame();
}
}
- 图标
- 有些控件,如按钮,上面可以设置图标,setIcon函数
- 在按钮上设置一个图标
import javax.swing.*;
import java.awt.*;
class TestFrame extends JFrame{
private JPanel jpl = new JPanel();
private JButton jbt = new JButton("注册新用户");
public TestFrame(){
this.add(jpl);
jpl.add(jbt);
Icon icon = new ImageIcon("img.jpg");
jbt.setIcon(icon);
this.setSize(300,600);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public static void main (String[] args) {
TestFrame tf = new TestFrame();
}
}
案例:
- 界面上有一个面板,要求面板颜色从黑色渐渐变成白色
import javax.swing.*;
import java.awt.*;
class Test extends JFrame implements Runnable{
private JPanel jpl = new JPanel();
public void run(){
for(int i=0;i<=255;i++){
Color c = new Color(i, i, i);
jpl.setBackground(c);
try{ Thread.sleep(10); } catch(Exception e){}
}
}
public Test(){
this.add(jpl);
this.setSize(300,600);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
new Thread(this).start();
}
public static void main (String[] args) {
Test tf = new Test();
}
}
- 界面从桌面顶端掉下来
import javax.swing.*;
import java.awt.*;
class TestFrame extends JFrame implements Runnable {
int X = 0, Y = 0;
public TestFrame(){
this.setSize(300,100);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
new Thread(this).start();
}
public void run(){
while(true){
X++; Y=X*X; this.setLocation(X,Y/50);
try{ Thread.sleep(100); }catch(Exception ex){}
}
}
public static void main (String[] args) {
TestFrame tf = new TestFrame();
}
}