特别注意:在窗体默认使用BorderLayout布局管理器时,请指明每个组件添加的位置,以免被覆盖。
? JscrollPane面板
在设置界面时,可能会遇到在一个较小的容器窗体中显示一个较大部分的内容的情况,这时可以使用JscrollPane面板。JscrollPane面板是带滚动条的面板,它也是一种容器,但是JscrollPane只能放置一个组件,并且不可以使用布局管理器。如果需要在JscrollPane面板中放置多个组件,需要将多个组件放置在JPanel面板上,然后将JPanel面板作为一个整体组件添加在JscrollPane组件上。 ? 例子
import java.awt.*; import javax.swing.*;
public class Test extends JFrame{ /*定义组件*/
private JTextArea ta; private JScrollPane mb1;
public static void main(String[] args){ new Test(); //创建本类对象 }
public Test() {
/*将窗体转化成容器*/
Container c=this.getContentPane(); /*创建组件*/
ta=new JTextArea(\请输入内容\, 20, 50); mb1=new JScrollPane(ta); /*将组件添加到窗体容器中*/ c.add(mb1);
/*设置窗体属性*/
this.setTitle(\滚动面板\); this.setSize(200,200); Dimension
screenSize=Toolkit.getDefaultToolkit().getScreenSize();
this.setLocation((screenSize.width-this.getWidth())/2,(scre
enSize.height-this.getHeight())/2); this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); /*设置窗体可见性*/
this.setVisible(true); } }
运行结果如下:
七、高级组件面板
? 分割面板JsplitPane
分割面板由java.swing.JsplitPane类实现,用来将其所在的区域分割成两部分,程序员可以根据实际情况决定是在水平方向上分割还是在垂直方向上分割。在这两部分之间存在一个分隔条,通过调整分隔条的位置,可以改变这两部分的相对大小,用户可以根据实际情况自行调整。该功能可以有效地增加界面的可用空间,这也是分割面板的主要特点。 ? 例子
import java.awt.*; import javax.swing.*;
public class Test extends JFrame{ /*定义组件*/
private JSplitPane hsp,vsp; private JButton an1,an2,an3;
public static void main(String[] args){ new Test().setVisible(true); //创建本类对象 }
public Test() {
/*将窗体转化成容器*/
Container c=this.getContentPane(); /*创建组件*/
hsp=new JSplitPane();
vsp=new JSplitPane(JSplitPane.VERTICAL_SPLIT); an1=new JButton(\按钮1\); an2=new JButton(\按钮2\); an3=new JButton(\按钮3\);
/*设置分割面板属性*/
hsp.setDividerLocation(100); vsp.setDividerLocation(30); vsp.setDividerSize(25);
vsp.setOneTouchExpandable(true); vsp.setContinuousLayout(true); /*将组件添加到窗体容器中*/ hsp.setLeftComponent(an1); hsp.setRightComponent(vsp); vsp.setLeftComponent(an2); vsp.setRightComponent(an3); c.add(hsp);
/*设置窗体属性*/
this.setTitle(\分割面板\);
this.setBounds(100, 100, 300, 300); this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }
运行结果如下:
说明:有些外观可能不支持在分隔条上方提供UI小部件的功能。 ? 选项卡面板JTabbedPane
选项卡面板由javax.swing.JtabbedPane类实现,它实现了一个多卡片的用户界面,通过它可以将一个复杂的对话框分割成若干个选项卡,实现对信息的分类显示和管理,使界面更简洁大方,还可以有效地减少窗体的个数。 ? 例子
import java.awt.*; import javax.swing.*;
public class Test extends JFrame{
/*定义组件*/
private JTabbedPane mb1;
private JButton an1,an2,an3,an4; private JPanel mb2;
public static void main(String[] args){ Test t=new Test(); //创建本类对象 t.setVisible(true); //设置窗体可见 }
public Test() {
Container c=this.getContentPane(); /*创建组件*/
mb1=new JTabbedPane();
mb1.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT); an1=new JButton(\按钮1\); an2=new JButton(\按钮2\); an3=new JButton(\按钮3\); an4=new JButton(\按钮4\); mb2=new JPanel(); /*添加组件*/ mb2.add(an3); mb2.add(an4);
mb1.addTab(\选项卡1\, an1); mb1.addTab(\选项卡2\, an2); mb1.addTab(\选项卡3\, mb2); c.add(mb1);
/*设置面板属性*/
mb1.setSelectedIndex(2); mb1.setEnabledAt(0,false); /*设置窗体属性*/
this.setTitle(\选项卡面板\); this.setSize(300, 200);
this.setLocation(500, 300); this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }
运行结果如下:
八、按钮组件
按钮在Swing中是较为常见的组件,用于触发特定动作。Swing中提供多种按钮,包括提交按钮、复选框、单选按钮等,这些按钮都是从AbstractButton类中继承而来的。 ? 提交按钮JButton 例子
import java.awt.*;
import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*;
public class Test extends JFrame implements ActionListener{ /*定义组件*/
private JButton an1,an2;
public static void main(String[] args){ Test T=new Test(); //创建本类对象 T.setVisible(true); //设置显示窗体 }
public Test() {
Container c=this.getContentPane(); c.setLayout(new FlowLayout()); /*创建组件*/
an1=new JButton(\按钮1\); an2=new JButton(); /*设置按钮属性*/
an2.setText(\按钮2\); //设置按钮上显示的文本 an2.setToolTipText(\按钮提示\); //设置按钮组件提示信息 an1.setEnabled(false); //设置按钮是否可用 /*为按钮添加事件*/
an2.addActionListener(this); an2.setActionCommand(\); /*添加组件*/ c.add(an1); c.add(an2);
/*设置窗体属性*/
this.setTitle(\按钮\); this.setSize(200, 120); Dimension
screenSize=Toolkit.getDefaultToolkit().getScreenSize();
this.setLocation((screenSize.width-this.getWidth())/2,(screenSize.height-this.getHeight())/2); this.setResizable(false);