一、Swing
1.概述
与AWT类似,Swing也是GUI的一部分,并且Swing是在AWT组件基础上构建的,它所提供的功能要比AWT提供的更为广泛
既然Swing是在AWT基础上构建的,那么Swing中就包含AWT中的各种组件,只是形式略有区别,用法相同
我们在使用Swing开发时,只需要很少的代码就可以利用其丰富、灵活的功能和模块化组件来创建更优雅的用户界面
2.顶层组件
使用Swing时,图形界面至少要有一个顶级Swing组件
顶级Swing组件为其它Swing组件在屏幕上的绘制和处理事件提供支持
3.常用的顶层组件
JFrame(窗口):表示主程序窗口
JDialog(对话框):每个JDialog对象表示一个对话框,对话框属于二级窗口
JApplet(小程序):与AWT类似,如JButton
4.AWT与Swing的异同
相同点:组件不会直接放到窗口上,而是放在个面板上,这些面板放到窗口上,才能显示图形界面
相异点:AWT在使用时,不需要获取容器,可以直接用具体的对象来添加;而Swing则是用顶层组件对象的getContentPane()方法获取到一个容器,在向顶曾组件中添加其他组件的时候,必须使用容器的add()方法来添加组件
二、代码
1.窗口、面板
public class suiyi {
//init(); 初始化
public void init(){
//顶级窗口
JFrame jf = new JFrame("这是一个JFrame窗口");
jf.setVisible(true);
jf.setBounds(100,100,200,200);
jf.setBackground(Color.cyan);
//设置文字 Jlabel
JLabel label = new JLabel("哈哈大笑一个吧");
jf.add(label);
//关闭事件
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
//建立一个窗口
new suiyi().init();
}
}
3.2弹窗
弹窗不用监听事件,点击右上角的关闭按钮就能关闭
public class suiyi extends JFrame {
public suiyi(){
this.setVisible(true);
this.setSize(700,500);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
//JFrame 放东西,容器
Container container = this.getContentPane();
//绝对布局
container.setLayout(null);
//按钮
JButton button = new JButton("点击弹出一个对话框"); //创建
button.setBounds(30,30,200,50);
//点击这个按钮的时候,弹出一个弹窗
button.addActionListener(new ActionListener() { //监听器
@Override
public void actionPerformed(ActionEvent e) {
//弹窗
new MyDialogDemo();
}
});
container.add(button);
}
public static void main(String[] args) {
new suiyi();
}
}
//弹窗的窗口
class MyDialogDemo extends JDialog{
public MyDialogDemo() {
JDialog jDialog = new JDialog();
jDialog.setVisible(true);
jDialog.setBounds(100,100,500,500);
Container container = jDialog.getContentPane();
container.setLayout(new FlowLayout(FlowLayout.CENTER));
container.add(new JLabel("一起学Java"));
}
}
3.3标签
public class IconDemo extends JFrame implements Icon {
private int width;
private int height;
public IconDemo() {
} //无参构造
public IconDemo(int width, int height) {
this.width = width;
this.height = height;
}
public void init() {
IconDemo iconDemo = new IconDemo(15, 15);
//图标放在标签,也可以放在按钮上!
JLabel label = new JLabel("icontest", iconDemo, SwingConstants.CENTER);
Container container = getContentPane();
container.add(label);
this.setVisible(true);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new IconDemo().init();
}
@Override
public void paintIcon(Component c, Graphics g, int x, int y) {
g.fillOval(x, y, width, height);
}
@Override
public int getIconWidth() {
return this.width;
}
@Override
public int getIconHeight() {
return this.height;
}
}
3.4面板
public class suiyi extends JFrame {
public suiyi() {
Container container = this.getContentPane();
container.setLayout(new GridLayout(2,1,10,10)); //后面的参数的意思,间距
JPanel panel1 = new JPanel(new GridLayout(1,3));
JPanel panel2 = new JPanel(new GridLayout(1,2));
JPanel panel3 = new JPanel(new GridLayout(2,1));
JPanel panel4 = new JPanel(new GridLayout(3,2));
panel1.add(new JButton("1"));
panel1.add(new JButton("1"));
panel1.add(new JButton("1"));
panel2.add(new JButton("2"));
panel2.add(new JButton("2"));
panel3.add(new JButton("3"));
panel3.add(new JButton("3"));
panel4.add(new JButton("4"));
panel4.add(new JButton("4"));
panel4.add(new JButton("4"));
panel4.add(new JButton("4"));
panel4.add(new JButton("4"));
panel4.add(new JButton("4"));
container.add(panel1);
container.add(panel2);
container.add(panel3);
container.add(panel4);
this.setVisible(true);
this.setSize(500,500);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new suiyi();
}
}
3.5按钮
注意:目录中必须有tx.jpg这个文件
public class suiyi extends JFrame {
public suiyi() {
Container container = this.getContentPane();
//将一个图片变为图标
URL resource = suiyi.class.getResource("tx.jpg");
Icon icon = new ImageIcon(resource);
//把这个图标放在按钮上
JButton button = new JButton();
button.setIcon(icon);
button.setToolTipText("图片按钮");
//add
container.add(button);
this.setVisible(true);
this.setSize(500,300);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new suiyi();
}
}
图片是一个大按钮
3.6下拉框
public class suiyi extends JFrame {
public suiyi() {
Container container = this.getContentPane();
JComboBox status = new JComboBox();
status.addItem(null);
status.addItem("正在热映");
status.addItem("已下架");
status.addItem("即将上映");
container.add(status);
this.setVisible(true);
this.setSize(500,350);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new suiyi();
}
}
3.7文本框
public class suiyi extends JFrame {
public suiyi() {
Container container = this.getContentPane();
JTextField textField = new JTextField("hello");
JTextField textField2 = new JTextField("world", 20);
container.add(textField, BorderLayout.NORTH);
container.add(textField2, BorderLayout.SOUTH);
this.setVisible(true);
this.setSize(500, 350);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new suiyi();
}
}