面板组件

Swing组件中提供了一些面板组件(中间容器),这些面板组件不能单独存在,只能放置在顶级窗口容器中。

常见的组件

JPanel:JPanel面板组件时一个无边框不能被移动、放大、缩小或者关闭的面板,它的默认布局管理器时FlowLayout
JScrollPane:JScrollPane是一个带有滚动条的面板容器,且只能添加一个组件;想向JScrollPane面板中添加多个组件,应先将这多个组件添加到某个组件中,然后再将这个组件添加到JScrollPane中。

常用构造方法:
JScrollPane():创建一个空的JScrollPane面板
JScollPane(Component view):创建一个显示指定组件的JScrollPane面板,只要组件的内容超过视图大小就会显示水平和垂直滚动条。
JScrollPane(Component view,int vsbPolicy,int hsbPolicy):创建一个显示指定容器、并且具有指定滚动条策略的JScrollPane。参数vsbPolicy和hsbPolicy分别表示垂直滚动条策略和水平滚动条策略。

说明:第三个构造方法是再第二个构造方法的基础上指定滚动条策略。如果再构造方法中没用指定显示组件和滚动条策略,也可以使用JScrollPane提供的方法进行设置。

JScrollPane设置面板滚动策略的方法

void setHorizontalBarPolicy(int policy):指定水平滚动条策略,即水平滚动条何时显示在滚动面板上
void setVericalBarPolicy(int policy):指定垂直滚动条策略,即垂直滚动条何时显示在面板上
void setViewportView(Component view):设置在滚动面板显示的组件。

说明:上述方法是JScrollPane滚动面板组件对象提供的设置滚动策略的方法。滚动策略方法取值可以使用ScrollPaneConstants接口中声明了多个常量属性来进行设置。

JScrollPane滚动策略常量值

VERTICAL_SCROLLBAR_AS_NEEDED
HORIZONTAL_SCROLLBAR_AS_NEEDED
当填充的组件视图超过客户端窗口大小时,自动显示水平和竖直放行滚动条(JscrollPane组件 的默认值)

VERTICAL_SCROLLBAR_ALWAYS
HORIZONTAL_SCROLLBAR_ALWAYS
无论填充的组件视图大小,始终显示水平和竖直放行滚动条

VERTICAL_ SCROLLBAR_ NEVER
HORIZONTAL_SCROLLBAR_NEVER
无论填充的组件视图大小,始终不显示水平和竖直放行滚动条

样例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class javagui {
public static void main(String[] args) {
//线程
SwingUtilities.invokeLater(() -> method());
}

private static void method() {
//创建主窗体
JFrame jf = new JFrame("窗体");
jf.setBounds(100,200,300,400);//可以用这一个方法设定窗口的位置和大小,前两个参数为位置坐标x,y后两个参数为宽和高

//创建带有滚动条的空面板
JScrollPane jScrollPane = new JScrollPane();

//设置水平滚动条策略,当组件超过了窗体大小,显示滚动条
jScrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);

//设置水平滚动条策略,设置滚动条一直存在
jScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

//创建JPanel,存储多个组件
JPanel panel = new JPanel();
panel.add(new JButton("按钮1"));
panel.add(new JButton("按钮2"));
panel.add(new JButton("按钮3"));
panel.add(new JButton("按钮4"));

//将组织好的一个panel组件,整个添加到带有滚动条的面板中
jScrollPane.setViewportView(panel);

jf.add(jScrollPane,BorderLayout.CENTER);

jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
}

}

效果图:

文本组件

文本组件用于接收用户输入的信息,包括文本框(JTextField,接收一行数据)、文本域(JTextArea,接收多行数据)等。
他们都有一个共同的父类JTextCompaonent,JtextComponent是一个抽象类。

常用方法

String String getText():返回文本组件中所有的文本内容
String getSelectedText():返回文本组件中选定的文本内容
void selectAll():在文本组件中选中所有的内容
void setEditable():设置文本组件为可编辑或者不可编辑状态
void setText(String text):设置文本组件内容
void replaceSelection(String content):用给定的内容替换当前选定的内容

JTextField:

JTextField成为文本框,它只能接收单行文本的输入。
常用构造方法:

JTextField():创建一个空的文本框,初始字符串为null
JTextField(int columns):创建一个具有指定列数的文本框,初始字符串为null
JTextField(String text):创建一个显示指定初始字符串的文本框
JTextField(String text,int column):创建一个具有指定列数、并显示指定初始字符串的文本框

说明:
JTextField右一个子类JPasswordField,表示一个单行输入密码框。在此框中是通过显示指定的回显字符作为占位符。新创建的密码框默认的回显字符为*。

JTextArea:

JTextArea称为文本域,它能接收多行文本的输入,使用JTextArea构造方法创建对象时可以设定区域的行数、列数
常用构造方法:

JTextArea():构造方法,创建一个空的文 本域
JTextArea(String text):构造方法,创建显示指定初始字符串的文本域
JTextArea(int rows,int columns):构造方法,创建具有指定行和列的空的文本域
JTextArea(String text, int rows,int columns):构造 方法,创建显示指定初始文本并指定了行列的文本域

样例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class javagui {
public static void main(String[] args) {
//线程
SwingUtilities.invokeLater(() -> method());
}

private static void method() {
//创建主窗体
JFrame jf = new JFrame("简单聊天窗体");
jf.setBounds(100,200,300,300);//可以用这一个方法设定窗口的位置和大小,前两个参数为位置坐标x,y后两个参数为宽和高

//设置布局为边界布局
jf.setLayout(new BorderLayout());

//创建聊天记录的JTextArea
JTextArea showArea = new JTextArea(12,25);//12行34列,可根据情况自由调整
showArea.setEnabled(false);//设置聊天展示窗口不可编辑

//创建滚动条面板组件
JScrollPane jScrollPane = new JScrollPane(showArea);
jf.add(jScrollPane,BorderLayout.PAGE_START);//添加到Frame

//创建文本输入框JTextField
JTextField text = new JTextField(10);

//创建发送按钮
JButton btn = new JButton("发送");

//为按钮注册监听事件
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//获取文本框中的数据
String content = text.getText();
if (content != null && content.length() != 0){//判断输入框内是否有内容,如果有内容才进行添加
showArea.append("输入的信息为:"+content+"\r\n");
}else {
showArea.append("发送内容为空\r\n");
}
text.setText("");//将发送窗口置空
}
});

//创建提示标签
JLabel label = new JLabel("聊天信息");

JPanel panel = new JPanel();
panel.add(label);
panel.add(text);
panel.add(btn);

jf.add(panel,BorderLayout.PAGE_END);

jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
}

}

效果截图: