Java程序设计——Swing UI 容器(一)

目录

1.顶级容器

 JFrame:顶级容器

2.中间容器

JPanel:中间面板

JScrollPane:提供一个具有滚动条的窗格

JSplitPane:提供一个具有拆分功能的窗格

JTabbedPane:提供一个带有若干标签的分类窗格(选项卡)

JInternalFrame:创建内嵌于JFrame的内部框架


容器是用来容纳和管理一组界面元素的对象

基本组件必须被安排在某个容器中,否则就无法使用

1.顶级容器

创建初始界面,为其他组件提供一个容器,以构建满足用户需求的操作界面

 JFrame:顶级容器

构造方法描述
JFrame  f = new JFrame();不带参数的构造函数
JFrame  f = new JFrame(String title);title是窗口标题


常用方法功能
setTitle(String title)设置JFrame标题文本
get/ setSize()获取/设置JFrame的大小
add(Object a)将组件添加到JFrame中
dispose( )关闭JFrame并回收用于创建窗口的任何资源
setVisible(boolean b)设置JFrame的可见性
setLocation(x,y)设置JFrame在屏幕的位置
setBounds(x,y,w,h)设置JFrame的位置及大小
setExtendedState(int);

设置拓展的状态,取值:

 NORMAL

ICONIFIED

MAXIMIZED_HORIZ

MAXIMIZED_VERT

MAXIMIZED_BOTH

setDefaultCloseOperation(int));设置默认的关闭时的操作,取值:
   DO_NOTHING_ON_CLOSE
   HIDE_ON_CLOSE
   DISPOSE_ON_CLOSE
   EXIT_ON_CLOSE /
setResizable()设置窗体是否可以调整大小
import javax.swing.*;

public class JFrame_MainClass  {
    public static void main(String[] args) {
        new MyJFrame();
    }
}
class MyJFrame extends JFrame{
    public MyJFrame(){
        super("一个没有任何东西的顶层容器");     // 设置顶级窗体的标题
        this.setSize(400,360);                 // 设置窗体大小
        this.setLocation(300,200);             // 设置窗体位置
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置窗体默认关闭方式
        this.setVisible(true);                               // 设置窗体是否可见
    }
}


2.中间容器

这些容器提供将有关组件按照某种布局组合在一起,然后放入中间容器或顶层容器的功能

 Container:内容面板

  • 一个完整的窗体是由外部框架和内容面板两部分组成的;
  • 外部框架是指由标题栏和四边所组成空心边框,它主要用来控制窗体的大小和外观;
  • 我们实际操作的是内容面板,如设置窗体的背景色,设置窗体的布局,往窗体中添加其它组件等等;
  • 使用getContentPane方法获得当前窗体的内容面板,该方法的返回值是Container(容器)类对象,如:
  • Container contentPane = getContentPane();
  • Container类通常用于操作JFrame的内容面板,其常用的方法有:

方 法 原 型

说    明

void setBackground(Color bg)

设置容器的背景色,由参数bg指定颜色

void setLayout(LayoutManager mgr)

设置容器的布局,参数是布局管理器

Component add(Component comp)

往容器中添加一个组件

Component add(Component comp, int index)

将指定组件添加到容器中的指定位置上

void remove(Component comp)

从容器中移除指定的组件

void removeAll()

从容器中移除所有组件

void repaint()

重新绘制当前容器

import javax.swing.*;
import java.awt.*;

class ContentPane_MainClass {
    public static void main(String[] args) {
        MyContentPane msp = new MyContentPane();
    }
}

class MyContentPane extends JFrame{
    private JLabel label;
    private JButton button;
    private Container container;
    public MyContentPane() {
        super("我是JFrame的一个内容面板" );
        container = this.getContentPane();            // 获取JFrame的内容面板
        container.setLayout(new BorderLayout());      // 设置内容面板的布局
        label = new JLabel("内容面板上一个小标签");
        button = new JButton("内容面板上的一个小按钮");
        container.add(label,BorderLayout.NORTH);      // 将组件添加到内容面板
        container.add(button,BorderLayout.SOUTH);
     //   this.add(container);                        // 不用将内容面板添加到顶级窗体
        this.setSize(400, 360);
        this.setLocation(300, 200);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }
}

 


JPanel:中间面板

构造方法        描述
JPanel p = new JPanel(); 默认FlowLayout布局的面板
JPanel p = new JPanel(LayoutManager layout);         指定布局的面板


常用方法功能
void setBackground(Color bg)设置面板的背景色,由参数bg指定颜色
void setLayout(LayoutManager mgr)设置面板的布局,参数是布局管理器
Component add(Component comp)往面板中添加一个组件
Component add(Component comp, int index)将指定组件添加到面板中的指定位置上
void remove(Component comp)从面板中移除指定的组件
void removeAll()从面板中移除所有组件
void repaint()重新绘制当前面板
public class JPanel_MainClass {
    public static void main(String[] args) {
        new MyJPanel();
    }
}
class MyJPanel extends JFrame {
    private JPanel panel;
    public MyJPanel() {
        super("我的中间面板");
        panel = new JPanel(new BorderLayout()); // 创建指定布局的中间面板
        panel.setBackground(Color.red);         // 设置中间面板的背景颜色
        this.add(panel);                        // 将中间面板panel放入顶级面板JFrame
         this.setSize(400,360);                 // 设置窗体大小
        this.setLocation(300,200);              // 设置窗体位置
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置窗体默认关闭方式
        this.setVisible(true);                               // 设置窗体是否可见
    }
}


JScrollPane:提供一个具有滚动条的窗格

构造方法描述
new JScrollPane()无参构造方法
new JScrollPane(Component comp)指定组件的构造方法
 JScrollPane(int vsbPolicy,int hsbPolicy)
      
        建立一个新的JScrollPane对象,里面不含有显示组件,但设置滚动轴出现时机。


常用方法功能
void setHorizontalScrollBarPolicy()

设置水平滚动块:

HORIZONTAL_SCROLLBAR_ALAWAYS: 显示水平滚动轴


HORIZONTAL_SCROLLBAR_AS_NEEDED:当组件内容水平区域大于显示区域时出现水平滚动轴

HORIZONTAL_SCROLLBAR_NEVER:不显示水平滚动轴

void setVerticalScrollBarPolicy()

设置垂直滚动块:

VERTICAL_SCROLLBAR_ALWAYS:显示垂直滚动轴


 VERTICAL_SCROLLBAR_AS_NEEDED:当组件内容垂直区域大于显示区域时出现垂直滚动轴


   VERTICAL_SCROLLBAR_NEVER: 不显示垂直滚动轴

void setCorner(String, Component)

设置或获取指定的角。int参数指定哪个角,并且必须是ScrollPaneConstants中定义的以下常量之一:

UPPER_LEFT_CORNER,

UPPER_RIGHT_CORNER,

LOWER_LEFT_CORNER,LOWER_RIGHT_CORNER,LOWER_LEADING_CORNER,LOWER_TRAILING_CORNER,

UPPER_LEADING_PER,NERPER。
 

import javax.swing.*;

public class JScrollPane_MainClass {
    public static void main(String[] args) {
        MyJScrollPane msp = new MyJScrollPane();
    }
}
class MyJScrollPane extends JFrame{
    private JScrollPane scrollPane;
    private JTextArea textArea;
    public MyJScrollPane() {
        super("我的滚动面板" );
        textArea = new JTextArea(20,20);
        scrollPane = new JScrollPane(textArea);      // 将文本域组件textArea放入滚动面板
        scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); // 设置水平滚动块
        scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);     // 设置垂直滚动块
        this.add(scrollPane);                        // 将滚动面板放入顶级面板
        this.setSize(400, 360);
        this.setLocation(300, 200);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }
}


JSplitPane:提供一个具有拆分功能的窗格

构造方法描述
 JSplitPane() 

建立一个新的JSplitPane,里面含有两个默认按钮,并以水平方向排列,且没有Continuous Layout功能

Continuous Layout意思是指当你拖曳切割面版的分隔线时,窗口内的组件是否会随着分隔线的拖曳而动态改变大小

JSplitPane(int newOrientation)

建立一个指定水平或垂直方向切割JSplitPane,但没有Continuous Layout功能

Continuous Layout意思是指当你拖曳切割面版的分隔线时,窗口内的组件是否会随着分隔线的拖曳而动态改变大小

JSplitPane(int newOrientation, boolean newContinuousLayout) 

建立一个指定水平或垂直方向切割的JSplitPane,且指定是否具有Continuous Layout功能。

1.Continuous Layout意思是指当你拖曳切割面版的分隔线时,窗口内的组件是否会随着分隔线的拖曳而动态改变大小

2.newContinuousLayout是一个boolean值,若设为true,则组件大小会随着分隔线的拖曳而一起改动;

若设为false,则组件大小在分隔线停止改动时才确定。

你也可以使用JSplitPane中的setContinuousLayout()方法来设置此项目



常用方法功能
setDividerLocation(double proportionalLocation) 设置分隔条的位置,用百分比表示
setContinuousLayout(boolean newContinuousLayout) 设置 continuousLayout 属性的值,在用户要使子组件连续地重新显示和布局子组件,此值必须为 true
setDividerLocation(int location)设置分隔条的位置
setDividerSize(int size)设置分隔条的大小
getDividerLocation()获取分隔条的位置
getDividerSize()获取分隔条的大小
setOneTouchExpandable(boolean val) 设置 oneTouchExpandable 属性的值为 true,则 JSplitPane 在分隔条上会显示一个用来快速展开/折叠分隔条的箭头
import javax.swing.*;

public class JSplitPane_MainClass {
    public static void main(String[] args) {
        MyJSplitPane msp = new MyJSplitPane();
    }
}

class MyJSplitPane extends JFrame{
    private JSplitPane jsp;
    private JLabel label;
    private JButton button;
    public MyJSplitPane() {
        super("我的一个具有拆分功能的窗格" );
        jsp = new JSplitPane ();
        label = new JLabel("我是一个标签");
        button = new JButton("我是一个按钮");
        jsp.setDividerLocation(200);         // 设置分割线的位置
        jsp.add(label,JSplitPane.LEFT);      // 添加组件并设置组件在分割窗格的位置
        jsp.add(button,JSplitPane.RIGHT);
        System.out.println("当前分隔条的大小:"+jsp.getDividerSize());
        System.out.println("当前分隔条的位置:"+jsp.getDividerLocation());
        this.add(jsp);                       // 将分割窗格放入顶级面板
        this.setSize(400, 360);
        this.setLocation(300, 200);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }
}


JTabbedPane:提供一个带有若干标签的分类窗格(选项卡)

构造方法       描述
JTabbedPane()创建一个空的 TabbedPane ,默认标签位置为 JTabbedPane.TOP
JTabbedPane(int tabPlacement)

创建空 的TabbedPane和任一指定的选项卡布局

选项卡布局可以是:

JTabbedPane.TOP

JTabbedPane.BOTTOM

JTabbedPane.LEFT

JTabbedPane.RIGHT 

JTabbedPane(int tabPlacement,int tabLayoutPolicy)

创建一个空的TabbedPane与指定的选项卡布局和选项卡布局策略

标签布局策略可以是: 

JTabbedPane.WRAP_TAB_LAYOUT

JTabbedPane.SCROLL_TAB_LAYOUT



常用方法功能
void addChangeListener(ChangeListener event)添加一个 ChangeListener事件
void removeChangeListener(ChangeListenerevent)移除一个 ChangeListener事件
int getTabPlacement()返回此标签页窗格的标签页的位置
setTabPlacement(int tabPlacement)设置此标签页窗格的标签位置(默认值——JTabbedPane.TOP )
int getSelectedIndex()返回此选项卡窗格的当前选择的索引
void setSelectedIndex(int index)设置此选项卡窗格的所选索引
Component getSelectedComponent()返回此选项卡窗格当前选定的组件
void setSelectedComponent(Component c)设置此选项卡窗格的选定组件
void insertTab(String title,Icon icon,Component component, String tip, int index)在给定的索引上插入给定组件的新选项卡,由给定的标题/或图标表示,其中任一个可能为 null
void addTab(String title, Icon icon, Component component, String tip)添加给定标题、组件、图标等新的选项卡,其中可为null
void removeTabAt(int index)删除index位置的标签
void remove(Component component)从JTabbedPane删除指定的Component,如果component为null,该方法不执行任何操作
void removeAll()删除所有选项卡 
int getTabCount()返回此 tabbedpane中的选项卡数
int getTabRunCount()返回当前用于显示选项卡的选项卡运行次数
Color getBackgroundAt(int index)返回 index标签背景颜色
Color getForegroundAt(int index)返回 index标签前景色为
void setBackgroundAt(int index, Color background)在设置index背景颜色的background可以是null ,在这种情况下选项卡的背景色默认为背景颜色tabbedpane 。 如果该索引中没有选项卡,则会引发内部异常
void setForegroundAt(int index, Color foreground)将index前景色设置为foreground ,可以为null
void setEnabledAt(int index,boolean enabled)设置是否启用index的选项卡
void setComponentAt(int index, Component component)在index选项卡放置此组件 
void setMnemonicAt(int tabIndex, int mnemonic)设置快捷键

setFont(font)

设置标签页名字的字体
import javax.swing.*;

class MyJTabbedPane_MainClass {
    public static void main(String[] args) {
        MyJTabbedPane msp = new MyJTabbedPane();
    }
}

class MyJTabbedPane extends JFrame{
    private JLabel label1,label2;
    private JPanel panel1,panel2;
    private JTabbedPane tabbedPane1;
    public MyJTabbedPane() {
        super("我是一个带有若干标签的分类窗格" );
        label1 = new JLabel("我是panel1面板的标签");
        label2 = new JLabel("我是panel2面板的标签");
        panel1 = new JPanel();
        panel2 = new JPanel();
        panel1.add(label1);                          // 将标签添加至对应的面板
        panel2.add(label2);

        tabbedPane1 = new JTabbedPane();
        tabbedPane1.add(panel1,"选项卡1");           // 将JPnael面板添加到选项卡面板
        tabbedPane1.add(panel2,"选项卡2");

        this.add(tabbedPane1);                      // 将选项卡面板添加到顶级窗体
        this.setSize(400, 360);
        this.setLocation(300, 200);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }
}


JInternalFrame:创建内嵌于JFrame的内部框架

构造方法描述
JInternalFrame()建立一个不能更改大小、不可关闭、不可最大最小化、也没有标题的JInternalFrame
JInternalFrame(String title)建立一个不能更改大小、不可关闭、不可最大最小化、但具有标题的JInternalFrame
JInternalFrame(String title,boolean resizable)建立一个不可关闭、不可最大最小化、但可变更大小且具有标题的JInternalFrame
JInternalFrame(String title,boolean resizable,boolean closable)建立一个可关闭、可更改大小、且具有标题,但不可最大化最小化的JInternalFrame
JInternalFrame(String title,boolean resizable,boolean closable,boolean maximizable)建立一个可关闭、可更改大小、具有标题、可最大化,但不可最小化的JInternalFrame
JInternalFrame(String title,boolean resizable,boolean closable,boolean maximizable,boolean iconifiable)建立一个可关闭、可更改大小、具有标题、可最大化与最小化的JInternalFrame



常用方法功能
setLocation(int x, int y)
设置内置窗体大小
setSize(int width, int height)
设置内置窗体位置
setVisible(boolean bool)
设置内置窗体是否可见
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

class JInternalFrame_MainClass {
    public static void main(String[] args) {
        MyJInternalFrame msp = new MyJInternalFrame();
    }
}

class MyJInternalFrame extends JFrame{
    private Container container;
    private JDesktopPane desktopPane;
    private JButton button;

    private JInternalFrame internalFrame;
    private Container icontentPane;
    private JTextArea internalTextArea;
    public MyJInternalFrame() {
        super("创建内嵌于JFrame的内部框架" );
        container = this.getContentPane();             // 获取一个内容面板
        desktopPane = new JDesktopPane();              // 建立虚拟桌面.它可以显示并管理众多JInternalFrame之间的层次关系
        button = new JButton("触发内部框架的按钮");     // 建立JFrame的一个按钮
        button.addActionListener(new ActionListener() {// 为按钮添加一个事件
            public void actionPerformed(ActionEvent e) {
                internalFrame = new JInternalFrame("JFrame的内部框架",true,
                        true,true,true);
                icontentPane = internalFrame.getContentPane();
                internalTextArea = new JTextArea();
                icontentPane.add(internalTextArea);
                desktopPane.add(internalFrame);   // 将internalFrame加入到desktopPane中
                internalFrame.setLocation(20, 20);// 设置内置框架的相关参数
                internalFrame.setSize(200, 200);
                internalFrame.setVisible(true);
            }
        });
        container.add(desktopPane);
        container.add(button,BorderLayout.SOUTH);
        this.setSize(400, 360);
        this.setLocation(300, 200);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }
}


(27条消息) Swing UI——基本组件(二)_Stuttering Guy的博客-CSDN博客https://blog.csdn.net/Mr_Morgans/article/details/125110881?spm=1001.2014.3001.5501 (27条消息) Swing UI——高级组件(三)_Stuttering Guy的博客-CSDN博客https://blog.csdn.net/Mr_Morgans/article/details/125115383?spm=1001.2014.3001.5501

(27条消息) Swing UI——布局管理器(四)_Stuttering Guy的博客-CSDN博客https://blog.csdn.net/Mr_Morgans/article/details/125115409?spm=1001.2014.3001.5501
(27条消息) Swing UI——事件处理(五)_Stuttering Guy的博客-CSDN博客https://blog.csdn.net/Mr_Morgans/article/details/125115417?spm=1001.2014.3001.5501

  • 4
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

来得晚一些也行

观众老爷,请赏~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值