Swing 常用组件
面板组件
说明: Swing 组件中提供了一些面板组件(中间容器),这些面板组件不能单独存在,只能放置在顶级窗口容器中。
常见组件:
JPanel: JPanel 面板组件是个无边框,不能被移动、放大、缩小或者关闭的面板,它的默认布局管理器是 Flowlayout
JScrollPane: JScrollPane 是一个带有滚动条的面板容器,且只能添加一个组件,想向了 Scroll Pane 面板中添加多个组件,应先将这多个组件添加到某个组件中,然后再将这个组件添加到JScrollPane 中。
我们来先创建一个窗体:
JFrame jf=new JFrame("面板组件");
jf.setBounds(100, 200, 300, 400);
并且设置它的长、宽以及位置。
//1.创建带有滚动条的空面板
JScrollPane jScrollPane=new JScrollPane();
//2.设置水平滚动条策略——当组件超过了窗体大小,显示滚动条
jScrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
//3.设置竖直滚动条策略——设置滚动条一直存在
jScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
//4.创建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"));
//5.将组织好的额一个panel组件,整个添加都带有滚动条的面板当中
jScrollPane.setViewportView(panel);
jf.add(jScrollPane,BorderLayout.CENTER);
jf.setDefaultCloseOperation(jf.EXIT_ON_CLOSE);;
jf.setVisible(true);
运行的效果是这样的:
文本组件
**定义:**文本组件用于接收用户输入的信息,包括文本框(JTextField).文本域(JTextArea)等
说明:它们都有一个共同父类了 Text Component. Next Component 是个抽象类。
文本组件——JTextField
定义: JTextField 称为文本框,它只能接收单行文本的输入
说明: JTextField有一个子类了 JPasswordField,表示一个单行输入密码框。在此框中是通过显示指定的回显字符作为占位符,新创建的密码框默认的回显字符为“*”。
文本组件-JTextArea
定义: JTextArea称为文本城,它能接收多行文本的输入,使用了 Text Area 构造方法创建对象时可以设定区域的行数列数
//创建容器窗体
JFrame jf=new JFrame("洪希的文本组件");
jf.setBounds(100, 200, 400, 400);
//设置布局为边界布局
jf.setLayout(new BorderLayout());
//2.创建聊天记录的JTextArea
JTextArea showArea=new JTextArea(12,25);
showArea.setEditable(false);
//2.1创建滚动条的面板组件
JScrollPane jScrollPane=new JScrollPane(showArea);
//3.创建文本输入框JTextField
JTextField text =new JTextField(15);
//4.创建发送按钮
JButton btn=new JButton("发送");
//5.为按钮注册监听事件
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("");
}
});
//6.创建提示标签
JLabel jLabel=new JLabel("聊天信息");
JPanel panel=new JPanel();
panel.add(jLabel);
panel.add(text);
panel.add(btn);
jf.add(panel,BorderLayout.PAGE_END);
jf.add(showArea,BorderLayout.PAGE_START);
jf.setDefaultCloseOperation(jf.EXIT_ON_CLOSE);;
jf.setVisible(true);
标签组件
**说明:**在 Swing 中常见的按钮组件有 JButton. JCheckBox, JRadioButton 等,它们都是抽象类 JAbstractButton 类的直接或间接子类。
按钮组件——JCheckBox
说明:JCheckBox 组件被称为复选框组件,它有选中和未选中两种状态,通常复选框会有多个,用户可以选择其中一个或多个。
常用构造方法: JCheckBox (string text, boolean selected)
创建一个带有文本信息,并指定初始状态(选中/未选中)的复选框。
除了上述构造方法,还可以调用从父类继承的 setText (String text)来设置复选框文本信息,调用 set Selected (boolean b) 方法来设置复选框状态(是否被选中)。也可以调用 is Selected ()方法来判断复选框是否被选中,
下拉框组件
定义: JComboBox 组件被称为下拉框或者组合框,它将所有选项折叠在一起,默认显示的是第一个添加的选项,当用户单击下拉框时,
会出现下拉式的选择列表,用户可以从中选择其中一项并显示
说明:JComboBox下拉框组件分为可编辑和不可编辑两种形式。对于不可编辑的下拉框,用户只能选择现有的选项列表。对于可编辑的下拉框,用户既可以选择现有的选项列表,也可以自己输入新的内容。
注意:自己输入的内容只能作为当前项显示,并不会添加到下拉框的选项列表中。
菜单组件——下拉式菜单
**说明:**计算机中很多文件的菜单都是下拉式的,如记事本的菜单。在 Swing 中,创建下拉式菜单需要使用三个组件:
- JMenuBar(菜单栏)
- JMenu(菜单)
- JMenuItem (菜单项)
JMenuBar
JMenuBar表示一个水平的菜单栏,它用来管理一组菜单,不参与同用户的交互式操作。菜单栏可以放在容器的任何位置,但通常情况下会使用顶级容器(如JFrame,JDialog)的 setMenuBar()方法将它放置在顶级容器的顶部。创建菜单栏时,只需要使用 new 关键字创建JMenuBar 对象即可,创建完菜单栏对象后,可以调用它的 add(JMenu c)方法为其添加JMenu 菜单。
JMenu (菜单)
JMenu 表示一个菜单,它用来整合管理菜单项,菜单可以是单层次的结构,也可以是多层次的结构,大多情况下,会使用JMenu (String text)构造函数创建JMenu 菜单,参数 text 表示菜单上的文本内容,
JMenuItem (菜单项)
JMenuItem 表示一个菜单项,它是菜单系统中最基本的组件,通常会使用JMenuItem(String text)这个构造方法为菜单项指定文本内容。
JMenuItem 继承自 AbstractButton 类,因此可以把它看成是一个按钮。
如果使用无参的构造方法创建了一个菜单项,则可以调用AbstractButton 类中继承的 setText(String text)方法和 setIcon 方法为其设置文本和图标。
JFrame jf=new JFrame("弹窗");
jf.setBounds(100, 200, 300, 400);
jf.setDefaultCloseOperation(jf.EXIT_ON_CLOSE);
jf.setVisible(true);
//1、创建弹出式菜单对象
JPopupMenu popupMenu=new JPopupMenu();
//2、创建两个菜单项
JMenuItem item1=new JMenuItem("查看");
JMenuItem item2=new JMenuItem("刷新");
//3、将菜单项加入菜单当中,并且加入分隔符
popupMenu.add(item1);
popupMenu.addSeparator();
popupMenu.add(item2);
//4、为JFrame窗体添加鼠标事件
jf.addMouseListener(new MouseAdapter() {
@Override //打出mouseClicked 按下回车,自动出来
public void mouseClicked(MouseEvent e) {
if (e.getButton()==MouseEvent.BUTTON3) {
popupMenu.show(e.getComponent(), e.getX(), e.getY()); //invoker的地方固定值e.getComponent()
}
}
});
效果如下: