Java Swing学习

注意
本文最后更新于 2023-07-30,文中内容可能已过时。

Swing包括了图形用户界面(GUI)器件如:文本框,按钮,分隔窗格和表。我在学习Swing时遇到了许多困惑,在这里记录一下,以便后续回顾。

JFrame和JPanel详解

刚学习的时候,跟着老师敲,但没有理解这两个东西,导致后面一直搞不清楚Swing的逻辑,查了些资料,现在有点明白了。

举一个不太准确的例子:假设Swing编程就像是我们在画画,我们画的圆圈,方块,文字就相当于Swing中的一个个组件。JFrame相当于一块透明的玻璃板,我们是没有办法在上面直接画画,JPanel相当于一张白纸,把这张白纸放到玻璃板上,就可以在纸上画出圆圈,方块和文字了。

JFrame是不能直接放置组件的,因为JFrame 不是一个容器,它只是一个框架。JFrame 有一个 Content Pane,窗口能显示的所有组件都是添加在这个 Content Pane 中。JFrame 提供了两个方法:getContentPane 和 setContentPane 就是用于获取和设置其 Content Pane 的。

先说setContentPane方法,常见于这样写:建立一个Jpanel中间容器,把组件添加到容器中,用setContentPane方法把该容器置为JFrame的内容面板

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
public class MyFrame3 extends JFrame {
    public MyFrame3(String tittle) {
        super(tittle);
        //创建一个面板,作为容器绑定到窗口上,这是不可见的
        JPanel jPanel = new JPanel();
        this.setContentPane(jPanel);
        
        JButton button = new JButton("按钮");
        jPanel.add(button);
        
        this.setVisible(true);  // 设置可见
    }
}

再说说getContentPane方法,常见于这样写:不用建立中间容器,直接用getContentPane().add()方式添加组件。getContentPane是得到了jframe的内容面板。

1
2
3
4
5
6
7
public class TestFrame extends JFrame{
    public TestFrame() {
        JLabel label = new JLabel("lableTest");
        getContentPane().add(label);
        add(label);  // 效果同上
    }
}

注意:在1.5版本之后,可以不用getContentPane,直接使用add方法即可。

容器和组件

容器:JFrame(窗体),JDialog(对话框),JPanel(面板)

顶级容器:也称窗口。JFrame 和 JDialog 是最为常用也是最为简单的顶级容器

中间容器:也称面板组件。常见有:JPanel和JScrollPane(带滚动条的面板)。不常见的:JInternalFrame和JRootPane(可以直接从顶层容器中获得)

组件:button,label等

总结梳理: 在Swing中,任何其他组件都必须位于一个顶层容器中(如JFrame)。中间容器是为了容纳其他组件而存在的,它能容纳组件并将组件组合在一起,但它本身必须添加到其他容器中使用。

组件使用

JMenuBar:顶部菜单栏

JTabbedPane:选项卡面板

布局管理器

注意:JFrame和JDialog默认布局为BorderLayout,JPanel和Applet默认布局为FlowLayout

参考:https://www.cnblogs.com/meteor119/p/15218920.html

流式布局:FlowLayout

边界布局:BorderLayout

网格布局:GridLayout

空布局/绝对布局:null

0%