Pane窗格

Pane是一类独立的控件,中文通常翻译为窗格。窗格中可以容纳另一个或多个组件,实现滚动条,标签页等效果。

实际上就这个滚动条而言,JScrollPane设计的就很有争议,因为类似JList这样的控件,显然应该默认带有滚动条,但是Swing并没有这样设计,JList必须结合JScrollPane才能实现滚动条,虽然看上去更符合面向对象的设计规范,但我也觉得这样做有点过度设计,显然给程序员带来了麻烦。

Swing中,有这样几种Pane:JScrollPaneJTabbedPaneJSplitPaneJLayeredPaneJDesktopPane。我们这里介绍其中比较常用的几种,Pane的用法基本都相同,需要时查阅文档即可。

JScrollPane 滚动条窗格

JScrollPane用来实现滚动条。我们直接看一个例子:

package com.gacfox.demo;

import javax.swing.*;

public class MyFrame extends JFrame {

    public MyFrame() {
        JScrollPane jScrollPane = new JScrollPane();
        JTextArea jTextArea = new JTextArea();
        jScrollPane.setViewportView(jTextArea);
        this.add(jScrollPane);
        this.pack();
    }
}

运行结果:

上面代码只是和JScrollPane有关的一小部分,但是足以说明问题了。我们创建了一个JTextArea,但是我们直接使用的话,它是没有滚动条的,因此我们又创建了一个JScrollPane,将JTextArea控件添加到JScrollPane中,当文本框中的数据行数超过其高度时,滚动条就出现了。

  • void setViewportView(Component view) 这个方法把一个控件添加到JScrollPane中。

除了文本域,所有继承JComponent的控件也都能使用JScrollPane

JTabbedPane 标签页窗格

标签页也比较常用,我们来看标签页的实现代码:

package com.gacfox.demo;

import javax.swing.*;

public class MyFrame extends JFrame {

    public MyFrame() {
        JTabbedPane jTabbedPane = new JTabbedPane();
        JPanel jPanel1 = new JPanel();
        JPanel jPanel2 = new JPanel();
        JPanel jPanel3 = new JPanel();
        jTabbedPane.addTab("tab1", jPanel1);
        jTabbedPane.addTab("tab2", jPanel2);
        jTabbedPane.addTab("tab3", jPanel3);
        this.add(jTabbedPane);
        this.pack();
    }
}

运行结果:

上面代码创建了一个JTabbedPane,然后使用addTab()函数添加了若干了JPanel。实际上,我们向标签页添加的组件通常都是JPanel,因为JPanel还能容纳其他组件。

  • void addTab(String title, Component component) 添加标签,第一个参数是标签的名字,第二个参数是标签页的组件。

JDesktopPane 虚拟桌面窗格

这里所说的虚拟桌面窗格在其它GUI框架中一般叫MDI,JDesktopPane配合JInternalFrame就是Swing中的MDI实现。JDesktopPane实际上是在JLayeredPane基础上实现的,后者应用较少,我们这里直接介绍JDesktopPane

下面代码中,我们创建了JDesktopPane,并添加了两个JInternalFrame

package com.gacfox.demo;

import java.awt.Dimension;

import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;

public class MyFrame extends JFrame {
    public MyFrame() {

        JInternalFrame internalFrame1 = new JInternalFrame("子窗格1");
        internalFrame1.setSize(320, 240);
        internalFrame1.setVisible(true);
        JInternalFrame internalFrame2 = new JInternalFrame("子窗格2");
        internalFrame2.setSize(320, 240);
        internalFrame2.setVisible(true);

        JDesktopPane jDesktopPane = new JDesktopPane();
        jDesktopPane.add(internalFrame1);
        jDesktopPane.add(internalFrame2);

        add(jDesktopPane);
        setSize(new Dimension(640, 480));
    }
}

运行结果:

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap