使用Swing组件1——使用顶级容器

使用顶级容器

正如我们前面提到的,Swing提供了三个大致有用的顶层容器类:JFrameJDialog,和JApplet。使用这些类时,您应该牢记以下事实:

  • 要在屏幕上显示,每个GUI组件都必须是包含层次结构的一部分。包含层次结构是一个组件树,其顶层容器作为其根。我们会向您展示一个。

  • 每个GUI组件只能包含一次。如果组件已经在容器中并且您尝试将其添加到另一个容器,则该组件将从第一个容器中删除,然后添加到第二个容器中。

  • 每个顶级容器都有一个内容窗格,一般来说,它包含(直接或间接)该顶级容器GUI中的可见组件。

  • 您可以选择将菜单栏添加到顶级容器。按照惯例,菜单栏位于顶级容器内,但位于内容窗格之外。一些外观和感觉,例如Mac OS的外观和感觉,让您可以选择将菜单栏放在更适合外观的另一个地方,例如屏幕顶部。

这是应用程序创建的框架的图片。该框架包含一个绿色菜单栏(没有菜单),并在框架的内容窗格中包含一个大的空白黄色标签。

package 使用顶级容器;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenuBar;

public class TopLevelDemo {
	private static void createAndShowGUI() {
		//创建并设置窗口
		JFrame frame=new JFrame("顶级容器");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		//成绩菜单栏,让它有一个绿色的背景
		JMenuBar greenMenuBar=new JMenuBar();
		greenMenuBar.setOpaque(true);
		//设置菜单栏背景为绿色
		greenMenuBar.setBackground(new Color(154,165,127));
		greenMenuBar.setPreferredSize(new Dimension(200,20));
		
		//创建一个黄色标签以放入内容窗格
		JLabel yellowLabel=new JLabel();
		yellowLabel.setOpaque(true);
		yellowLabel.setBackground(new Color(248,213,131));
        yellowLabel.setPreferredSize(new Dimension(200,180));
        
        //设置菜单栏并将标签添加到内容窗格
        frame.setJMenuBar(greenMenuBar);
        frame.getContentPane().add(yellowLabel, BorderLayout.CENTER);
        
        //显示窗口
        frame.pack();
        frame.setVisible(true);
	}
	
	public static void main(String[] args) {
		createAndShowGUI();
	}
}

顶级容器和包含层次结构

使用Swing组件的每个程序至少有一个顶级容器。此顶级容器是包含层次结构的根 - 包含显示在顶级容器内的所有Swing组件的层次结构。

通常,具有基于Swing的GUI的独立应用程序至少有一个JFrame以其根为根的包含层次结构。例如,如果应用程序具有一个主窗口和两个对话框,则该应用程序具有三个包含层次结构,因此具有三个顶级容器。一个包含层次结构JFrame以其根为根,而另外两个包含JDialog对象作为其根。

基于Swing的applet至少有一个包含层次结构,其中一个包含一个JApplet对象。例如,调出对话框的applet有两个包含层次结构。浏览器窗口中的组件位于以JApplet对象为根的包含层次结构中。该对话框具有以JDialog对象为根的包含层次结构。

将组件添加到内容窗格

这是前面的示例用于获取框架内容窗格并向其添加黄色标签的代码:

frame.getContentPane().add(yellowLabel,BorderLayout.CENTER);

如代码所示,您可以通过调用getContentPane方法找到顶级容器的内容窗格。默认内容窗格是一个简单的中间容器,它继承自JComponent,并使用a BorderLayout作为其布局管理器。

请注意,默认布局管理器JPanelFlowLayout; 你可能想要改变它。

要使组件成为内容窗格,请使用顶级容器的setContentPane方法。例如:

   //创建一个面板并向其中添加组件。
  JPanel contentPane = new JPanel(new BorderLayout());
  contentPane.setBorder(someBorder);
  contentPane.add(someComponent,BorderLayout.CENTER);
  contentPane.add(anotherComponent,BorderLayout.PAGE_END);
  ​
  topLevelContainer .setContentPane(contentPane);

添加菜单栏

理论上,所有顶级容器都可以容纳菜单栏。但实际上,菜单栏通常只出现在框架和小程序中。要将菜单栏添加到顶级容器,请创建一个JMenuBar对象,使用菜单填充它,然后调用setJMenuBar。在TopLevelDemo添加菜单栏与此代码框架:

frame.setJMenuBar(greenMenuBar);

根窗格

每个顶级容器都依赖于一个称为根窗格的隐藏中间容器。根窗格管理内容窗格和菜单栏以及其他几个容器。您通常不需要了解根窗格来使用Swing组件。但是,如果您需要拦截鼠标点击或绘制多个组件,您应该熟悉根窗格。

以下是根窗格为框架(以及每个其他顶级容器)提供的组件列表:

 

我们已经告诉过您内容窗格和可选菜单栏。根窗格添加的另外两个组件是分层窗格和玻璃窗格。分层窗格包含菜单栏和内容窗格,并启用其他组件的Z顺序。玻璃窗格通常用于拦截顶层容器上发生的输入事件,也可用于绘制多个组件。

实例

实例1-将组件添加到内容窗格

/**
 * 将一个ScrollPane面板设为内容窗格
 */
package 使用顶级容器;

import java.awt.Color;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class ContentPaneDemo {

	private static void setContentPane() {
		// 创建并设置窗口
		JFrame frame = new JFrame("内容窗格");
		frame.setSize(300, 400);
		frame.setLocation(300, 300);
		frame.setLayout(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		// 创建一个JTextArea
		JTextArea textArea = new JTextArea(5, 20);
		//设置文本内容可编辑
		textArea.setEditable(true);
		// 设置自动换行
		textArea.setLineWrap(true);

		// 创建一个ScrollPane面板
		JScrollPane scrollPane = new JScrollPane(textArea);
		// 设置面板背景色
		scrollPane.setBackground(Color.gray);

		// 使scrollPane组件成为内容窗格
		frame.setContentPane(scrollPane);

		// 显示窗口
		frame.pack();
		frame.setVisible(true);
	}

	public static void main(String[] args) {
		setContentPane();
	}
}

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值