阅读原文 链接
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
无论填充的组件视图大小,始终不显示水平和竖直放行滚动条
样例代码:
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():创建一个空的文本框,初始字符串为null
JTextField(int columns):创建一个具有指定列数的文本框,初始字符串为null
JTextField(String text):创建一个显示指定初始字符串的文本框
JTextField(String text,int column):创建一个具有指定列数、并显示指定初始字符串的文本框
说明:
JTextField右一个子类JPasswordField,表示一个单行输入密码框。在此框中是通过显示指定的回显字符作为占位符。新创建的密码框默认的回显字符为*。
JTextArea称为文本域,它能接收多行文本的输入,使用JTextArea构造方法创建对象时可以设定区域的行数、列数
常用构造方法:
JTextArea():构造方法,创建一个空的文 本域
JTextArea(String text):构造方法,创建显示指定初始字符串的文本域
JTextArea(int rows,int columns):构造方法,创建具有指定行和列的空的文本域
JTextArea(String text, int rows,int columns):构造 方法,创建显示指定初始文本并指定了行列的文本域
样例代码:
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); } }
效果截图: