Java程序设计 图形用户界面【五】

659 阅读4分钟

这是我参与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);
    }
}

image-20220209161007990

所有的组件是采用顺序的形式加入到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);
    }
}

image-20220209165242655

左右的分割面板的分割线长度比较小

上下的分割面板的分割线长度大一些

有快速展开/折叠功能

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);
    }
}

image-20220209172411560

建立了两个选项卡,并且将选项卡放在了窗体顶部

每一个选项卡都加入了一个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);
    }
}

image-20220209174950657

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);
    }
}

image-20220209182612802