容器java.awt.Container是Component的子类,一个容器可以容纳多个组件,并使它们成为一个整体。容器可以简化图形化界面的设计,以整体结构来布置界面。
Swing常用的顶层容器有JFrame、JApplet、JDialog、JWindow共4个。

JFrame框架

JFrame是与AWT中的Frame相对应的Swing组件。JFrame上面只能有一个唯一的组件,这个组件为JRootPane,调用JFrame.getContentPane()方法可获得JFrame中内置的JRootPane对象。
应用程序不能直接在JFrame实例对象上增加组件和设置布局管理器,而应该在JRootPane对象上增加子组件和设置布局管理器。
调用JFrame的setDefaultCloseOperation方法,可以设置单击窗口上的关闭按钮时的事件处理方式,例如,当设置值为JFrame.EXIT_ON_CLOSE时,单击JFrame窗口上的关闭按钮,将直接关闭JFrame框架窗口并结束程序运行。
【例】使用JFrame创建的框架窗口。

package Swing;
import java.awt.*;//加载java.awt类库里的所有类
import javax.swing.*;//加载javax.swing类库里的所有类
public class JFrame_Exam extends JFrame {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		JFrame_Exam mainJFrame=new JFrame_Exam();
		mainJFrame.setTitle("JFrame框架实例!");//创建一个JFrame并设置标题
		mainJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭动作
		mainJFrame.setSize(300, 300);//设置JFrame的大小,默认为(0,0)
		mainJFrame.setLocationRelativeTo(null);//使窗口显示在屏幕中央
		mainJFrame.getContentPane().setLayout(new FlowLayout());
		//设置JFrame的内容面板背景,默认为绿色
		mainJFrame.getContentPane().setBackground(Color.green);
		JLabel lbl=new JLabel("大家好!我是一个标签");
		JButton btn=new JButton("按钮");
		mainJFrame.getContentPane().add(lbl);//将标签对象lbl加入到内容面板中
		mainJFrame.getContentPane().add(btn);//将按钮对象btn加入到内容面板中
		mainJFrame.setVisible(true);//设置JFrame为可见,默认为不可见
	}
}

java 变长容器 java swing容器_布局管理器

JPanel面板

面板(JPanel)是一个轻量级容器组件,是一种没有标题的中间容器,用于容纳界面元素,以便在布局管理器的设置下容纳更多的组件,实现容器的嵌套。JPanel、JScrollPane、JSplitPane和JInternalJFrame都属于常用的中间容器,是轻量级组件。JPanel的默认布局管理器是FlowLayout。这类容器不能独立存在,必须通过add()方法添加到一个顶层容器或存在于顶层容器的一个中间容器。
JPanel类、AbstractButton类、JLabel、JList、JComboBox类、JTextComponent类等均是JComponent类的子类。它们均继承了JComponent类中的许多常用方法。
【例】在框架窗口在加入JPanel面板。

package Swing;
import java.awt.*;
import javax.swing.*;
public class JPanel_Exam {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		JFrame mainJFrame=new JFrame("框架+面板示例!");
		mainJFrame.setSize(240, 240);
		mainJFrame.setLocation(200, 200);
		Container container=mainJFrame.getContentPane();
		container.setBackground(Color.lightGray);
		container.setLayout(null);
		JPanel pnl=new JPanel();
		pnl.setSize(190, 180);//设置pnl的大小
		pnl.setBackground(Color.green);//设置pnl的背景
		pnl.setLocation(20, 20);//设置pnl面板的位置
		JButton btn=new JButton("我是一个按钮,单击我");
		btn.setSize(170, 40);//设置btn的大小
		btn.setBackground(Color.yellow);//设置btn的背景色
		btn.setLocation(10, 50);//设置btn的位置
		pnl.setLayout(null);//取消pnl的默认布局管理器
		pnl.add(btn);//将命令按钮btn加入到面板pnl中
		container.add(pnl);//将面板pnl加入到窗口默认面板中
		mainJFrame.setVisible(true);
	}
}

java 变长容器 java swing容器_java_02

JDialog对话框

JDialog组件描述的是对话窗口,但它比JFrame简单,没有最小化按钮、状态等控制元素。JDialog组件主要用来显示提示信息或接收用户输入。当对话窗口很小时,常被成为对话框。对话框一般是一个临时窗口。对话框一般都对应于一个顶层窗口,如JFrame窗口。
对话框根据显示模式分为有模式和无模式两种。有模式对话框在运行期间不允许用户同应用程序的其他窗口进行交互,而无模式对话框则允许用户在同时在该对话框和其他程序窗口中进行切换操作。通常情况下,程序要在处理完对话框中的数据后才能进行下一步工作,因此,有模式的对话框应用较多。

Swing其他容器

Swing容器面板主要包括以下几类。

1.分层面板(JLayeredPane)
Swing提供两种分层面板:JLayeredPane和JDesktopPane。JDesktopPane是JLayeredPane的子类,专门为容纳内部框架(JInternalPane)而设置。
使用add()方法向一个分层面板中添加组件,需要说明将其加入哪一层,指明组件在该层中的位置,该方法的格式如下:
add(Component c,Integer Layer,int position)

2.滚动窗口(JScrollPane)
JScrollPane是带滚动条的面板,主要通过移动JViewport(视口)来实现。JViewport是一种特殊的对象,用于查看基层组件,滚动条实际就是沿着组件移动视口,同时描绘出它在下面“看到”的内容。

3.分隔板(JSplitPane)
JSplitPane提供可拆分窗口,支持水平拆分和垂直拆分并带有滑动条。常用的方法如下:

addImpl(Component comp,Object constraints,int index)//增加指定的组件
 setTopComponent(Component comp)//设置顶部的组件
 setDividerSize(int newSize)//设置拆分的大小
 setUI(SplitPaneUI ui)//设置外观和感觉

4.选项板(JTabbedPane)
JTabbedPane提供一组可供用户选择的带有标签或图标的开关键。常用的方法如下:
add(String title,Component component)//增加一个带特定标签的组件
addChangeListener(ChangeListener l)//选项板注册一个变化监听器

5.工具栏(JToolBar)
JToolBar是用于显示常用工具控件的容器。用户可以拖曳出一个独立的可显示工具控件的窗口。常用的方法如下:

JToolBar(String name)//构造方法
 getComponentIndex(Component c)//返回一个组件的序号
 getComponentAtIndex(int i)//得到一个指定序号的组件

6.内部框架(JInteFrame)
内部框架JInteFrame就如同一个窗口在另一个窗口内部。
实例如下:

JFrame frame=new JFrame(“InternalFrameDemo”);//实例化窗口
 JDesktopPane desktop=new JDesktopPane();//实例化容器JDesktopPane
 MyInternalFrame myframe=new MyInternalFrame();//实例化内部窗口
 desktop.add(myframe);//把内部窗口添加到容器中
 myframe.setSelected(true);//内部面板是可以选择的
 frame.setContentPane(desktop);//把desktop设为frame的内容面板

案例分析:Swing容器银行登录界面综合示例

Java语言-BankContainer_Exam.java