这是我参与2022首次更文挑战的第23天,活动详情查看:2022首次更文挑战
Java程序设计 图形用户界面【五】
容器
除了可使用JFrame表示外,还有其他几种常见的窗体:JPanel、JSplitPane、JTabbedPane、JScrollPane、JDesktopPane、JInternalFrame等
JPanel
JPanel也是经常使用到的容器之一,可以使用JPanel完成各种复杂的界面显示。在JPanel中可以加入任意的组件,然后直接将JPanel容器加入到JFrame容器中即可显示
方法 | 作用 |
---|---|
public JPanel() | 创建一个默认的JPanel对象,使用流布局管理 |
public JPanel(LayoutManager layout) | 创建一个指定布局管理器的JPanel对象 |
import javax.swing.*;
public class Hello {
public static void main(String[] args) {
JFrame frame = new JFrame("一");
JPanel pan = new JPanel();
pan.add(new JLabel("A"));
pan.add(new JButton("A"));
pan.add(new JLabel("B"));
pan.add(new JButton("B"));
frame.add(pan);
frame.pack();
frame.setLocation(300,200);
frame.setVisible(true);
}
}
所有的组件是采用顺序的形式加入到JPanel中
JSplitPane
JSplitPane主要功能是分割面板,可以将一个窗体分为两个子窗体,可以是水平排列也可以是垂直排列
常量
常量 | 作用 |
---|---|
public static final int HORIZONTAL_SPLIT | 表示水平分割 |
public static final int VERTICAL_SPLIT | 表示垂直分割 |
方法
方法 | 作用 |
---|---|
public JSplitPane(int newOrientation) | 创建对象,并指明分割方式 |
public JSplitPane(int newOrientation,boolean new ContinuousLayout,Component newLeftComponent,Component newRightlLocation) | 创建对象,指明分割方式、分割条改变是否重绘图像以及两端的显示组件 |
public void setDividerLocation(double proportionalLocation) | 设置分割条的位置,按百分比 |
public void setOneTouchExpandable(boolean newValue) | 设置是否提供快速展开、折叠的功能 |
public void setDividerSize(int newSize) | 设置分割条大小 |
import javax.swing.*;
import java.awt.*;
public class Hello {
public static void main(String[] args) {
JFrame frame = new JFrame("一");
Container cont = frame.getContentPane();
// 取得窗体容器
JSplitPane lf = null;
JSplitPane tb = null;
lf=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,new JLabel("左"),new JLabel("右"));
tb=new JSplitPane(JSplitPane.VERTICAL_SPLIT,lf,new JLabel("下"));
tb.setDividerSize(10);
tb.setOneTouchExpandable(true);
cont.add(tb);
frame.setSize(300,200);
frame.setLocation(300,200);
frame.setVisible(true);
}
}
左右的分割面板的分割线长度比较小
上下的分割面板的分割线长度大一些
有快速展开/折叠功能
JTabbedPane
JTabbedPane是在一个面板上设置多个选项卡
常量
常量 | 作用 |
---|---|
static final int TOP | 表示指向框顶部位置 |
static final int BOTTOM | 表示指向框底部位置 |
static final int LEFT | 表示指向框左部位置 |
static final int RIGHT | 表示指向框右部位置 |
方法
方法 | 作用 |
---|---|
public JTabbedPane(int tabPlancement) | 创建对象,并指定选项卡布局 |
public void addTab(String title,Component compioent) | 添加一个有标题,没有图标的组件 |
public void addTab(String title,Icon icon,Component component) | 添加一个有标题,有图标的组件 |
public void addTab(String title,Icon icon,Component component,String tip) | 添加一个有标题,有图标,有提示信息的组件 |
import javax.swing.*;
import java.awt.*;
public class Hello {
public static void main(String[] args) {
JFrame frame = new JFrame("一");
Container cont = frame.getContentPane();
JTabbedPane tab = null;
tab = new JTabbedPane(JTabbedPane.TOP);
JPanel p1= new JPanel();
JButton b1 = new JButton("1");
p1.add(b1);
JPanel p2= new JPanel();
JButton b2 = new JButton("2");
p2.add(b2);
tab.addTab("一",p1);
tab.addTab("二",p2);
cont.add(tab);
frame.setSize(300,200);
frame.setLocation(300,200);
frame.setVisible(true);
}
}
建立了两个选项卡,并且将选项卡放在了窗体顶部
每一个选项卡都加入了一个JPanel面板
JScrollPane
主要功能就是为显示的内容加入水平滚动条
常量 | 作用 |
---|---|
static final int HORIZONTAL_SCROLLBAR_ALWAYS | 始终显示水平滚动条 |
static final int HORIZONTAL_SCROLLBAR_NEVER | 任何情况下都不显示水平滚动条 |
static final int HORIZONTAL_SCROLLBAR_AS_NEEDED | 根据自身需要显示水平滚动条 |
static final int VERTICAL_SCROLLBAR_ALWAYS | 始终显示垂直滚动条 |
static final int VERTICAL_SCROLLBAR_NEVER | 任何情况下都不显示垂直滚动条 |
static final int VERTICAL_SCROLLBAR_AS_NEEDED | 根据自身需要显示垂直滚动条 |
方法 | 作用 |
---|---|
public JScrollPane(Component view) | 将指定的组件加入滚动条,根据大小显示滚动条 |
public JScrollPane(Component view,int vsbPolicy,int hsbPolicy) | 将指定的组件加入滚动条,根据需要设置是否显示滚动条 |
public void setHorIzontalScrollBarPolicy(int policy) | 设置水平滚动条的显示策略 |
public void setVerticalScrollBarPolicy(int policy) | 设置垂直滚动条的显示策略 |
import javax.swing.*;
import java.awt.*;
public class Hello {
public static void main(String[] args) {
JFrame frame = new JFrame("一");
Container cont = frame.getContentPane();
String Path="C:\\Users\\30452\\Desktop\\123.jpg";
Icon icon = new ImageIcon(Path);
JPanel pan = new JPanel();
JLabel lab = new JLabel(icon);
pan.add(lab);
JScrollPane s = null;
s = new JScrollPane(pan,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
cont.add(s);
frame.setSize(200,500);
frame.setLocation(300,200);
frame.setVisible(true);
}
}
JDesktopPane与JInternalFrame
JDesktopPane规定了一个父窗体的基本形式,而JInternalFrame规定了各个子窗体,JInternalFrame需要加入到JDesktopPane中
JDesktopPane类的常用方法
方法 | 作用 |
---|---|
public JDesktopPane() | 创建一个JDesktopPane()对象 |
public void setSelectedFrame(JInternalFrame f) | 设置此JDesktopPane中当前活动的JInternalFrame |
JInternalFrame类的常用方法
方法 | 作用 |
---|---|
public JInternalFrame(String title) | 创建不可调整大小的、不可关闭的、不可最大化的、不可图标化的、具有指定标题的JInternalFrame |
public JInternalFrame(String title,boolean resizable) | 创建不可关闭的、不可最大化的、不可图标化的、具有指定标题、可调整大小的、的JInternalFrame |
public JInternalFrame(String title,boolean resizable,boolean closable,boolean maximizable,boolean iconifiable) | 创建可调整大小、可关闭、可最大化、不可图标化、具有指定标题的JInternalFrame |
import javax.swing.*;
import java.awt.*;
public class Hello {
public static void main(String[] args) {
JFrame frame = new JFrame("一");
frame.setLayout(new BorderLayout());
Container cont = frame.getContentPane();
JDesktopPane desk = new JDesktopPane();
cont.add(desk,BorderLayout.CENTER);
JInternalFrame jif = null;
String Path = "C:\\Users\\30452\\Desktop\\123.jpg";
Icon icon = new ImageIcon(Path);
JPanel pan = null;
for(int i=0;i<2;i++){
jif = new JInternalFrame("test",true,true,true,true);
pan = new JPanel();
pan.add(new JLabel(icon));
jif.setLocation(35-i*20,35-i*20);
jif.add(pan);
jif.pack();
jif.setVisible(true);
desk.add(jif);
}
frame.setSize(600,800);
frame.setLocation(300,200);
frame.setVisible(true);
}
}