JInternalFrame的使用

JInternalFrame的使用

类层次结构图:
 java.lang.Object
    --java.awt.Component
    --java.awt.Container
       --javax.swing.JComponent
             --javax.swing.JInternalFrame

JinternalFrame的使用跟JFrame几乎一样,可以最大化、最小化、关闭窗口、加入菜单等功能;唯一不同的是JinternalFrame是 lightweight component ,也就是说JInternalFrame不能单独出现,必须依附在最上层组件上。由于这个特色,JInternalFrame能 够利用java提供的Look and Feel功能作出完全不同于原有操作系统所提供的窗口外型,也比JFrame更具有弹性。

一般我们会将Internal Fram加入Desktop Pane方便管理,Desktop Pane是一种特殊的Layered pane,用来建立虚拟桌面(Vitual Desktop).它可以显示并管理众多Internal Frame之间的层次关系。以下是JDesktopPane的类层次结构图;

类层次结构图:
 java.lang.Object
     --java.awt.Component
     --java.awt.Container
     --javax.swing.JComponent
     --javax.swing.JLayeredPane
     --javax.swing.JDesktop

我们先来看看如何构造JInternalFrame与JDesktopPane,再来看它跟Desktop Pane之间的关系。下面分别是JInternalFram与 JDesktopPane的构造函数:

JInternalFrame构造函数:

JInternalFrame():建立一个不能更改大小、不可关闭、不可最大最小化、也没有标题的Internal Frame。

JInternalFrame(String title):建立一个不能更改大小、不可关闭、不可最大最小化、但具有标题的Internal Frame。

JInternalFrame(String title,boolean resizable):建立一个不可关闭、不可最大最小化、但可变更大小且具有标题的 Internal Frame。

JInternalFrame(String title,boolean resizable,boolean closable):建立一个可关闭、可更改大小、且具有标题,但不可 最大化最小化的Internal Frame.

JInternalFrame(String title,boolean resizable,boolean closable,boolean maximizable):建立一个可关闭、可更改大小、 具有标题、可最大化,但不可最小化的Internal Frame.

JInternalFrame(String title,boolean resizable,boolean closable,boolean maximizable,boolean iconifiable): 建立一个可关闭、可更改大小、具有标题、可最大化与最小化的Internal Frame.

JDesktopPane构造函数:

JDesktopPane():建立JDesktopPane组件。

如何利用JDesktoPane来管理JInternalFrame:

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

public class JInternalFrame1 extends JFrame implements ActionListener {

	JDesktopPane desktopPane;
	int count = 1;

	public JInternalFrame1() {
		super("JInternalFrame1");
		Container contentPane = this.getContentPane();
		contentPane.setLayout(new BorderLayout());

		JButton b = new JButton("Create New Internal Frames");
		b.addActionListener(this);// 当用户按下按钮时,将运行actionPerformed()中的程序
		contentPane.add(b, BorderLayout.SOUTH);
		/*
		 * 建立一个新的JDesktopPane并加入于contentPane中
		 */
		desktopPane = new JDesktopPane();
		contentPane.add(desktopPane);

		setSize(350, 350);
		show();

		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
	}

	/*
	 * 产生一个可关闭、可改变大小、具有标题、可最大化与最小化的Internal Frame.
	 */
	public void actionPerformed(ActionEvent e) {
		JInternalFrame internalFrame = new JInternalFrame("Internal Frame "
				+ (count++), true, true, true, true);

		internalFrame.setLocation(20, 20);
		internalFrame.setSize(200, 200);
		internalFrame.setVisible(true);
		// 取得JInternalFrame的Content Pane,用以加入新的组件。
		Container icontentPane = internalFrame.getContentPane();
		JTextArea textArea = new JTextArea();
		JButton b = new JButton("Internal Frame Button");
		/*
		 * 将JTextArea与JButton对象加入JInternalFrame中。由此呆知,JInteranlFrame加入组件
		 * 的方式与JFrame是一模一样。
		 */
		icontentPane.add(textArea, "Center");
		icontentPane.add(b, "South");
		// 将JInternalFrame加入JDesktopPane中,如此一来,即使产生很多JInternalFrame,JDesktopPane也
		// 能将它们之间的关系管理得相当良好。
		desktopPane.add(internalFrame);

		try {
			internalFrame.setSelected(true);
		} catch (java.beans.PropertyVetoException ex) {
			System.out.println("Exception while selecting");
		}
	}

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可能是因为以下原因导致jinternalframe窗口不显示: 1. 没有将jinternalframe添加到JDesktopPane中。 2. jinternalframe的setVisible属性设置为false。 3. jinternalframe的大小设置为或者太小。 4. jinternalframe的位置设置在屏幕外。 5. jinternalframe的内容为空或者没有添加组件。 6. jinternalframe的背景色与父容器相同,导致看不到。 7. jinternalframe的层级设置不正确,被其他组件遮挡。 需要检查以上问题,才能解决jinternalframe窗口不显示的问题。 ### 回答2: jInternalFrame是Java Swing框架中的一个内部窗口,用于在应用程序的主窗口中创建一个独立的子界面。如果jInternalFrame窗口没有显示出来,可能是由于以下原因: 1. 必须将jInternalFrame对象添加到JDesktopPane窗口中。JDesktopPane是用于管理内部窗口的容器。要显示jInternalFrame,请确保将其添加到JDesktopPane中。 2. 在添加jInternalFrame到JDesktopPane之前,必须先将其设置为可见。只有当jInternalFrame可见时,才能被正确地添加到JDesktopPane中。 3. 可能是由于jInternalFrame设置了错误的大小或位置导致无法显示。请检查其大小和位置属性,并确保它们与容器对齐。 4. 可能是由于jInternalFrame的默认的关闭操作设置有误。如果默认操作设置为HIDE_ON_CLOSE,那么当用户关闭jInternalFrame时,它将被隐藏而不是销毁。要完全销毁jInternalFrame,请将默认关闭操作设置为DISPOSE_ON_CLOSE。 5. 可能是由于jInternalFrame被添加到了错误的父容器中。jInternalFrame只能被添加到JDesktopPane中,如果被添加到其他容器中将无法正常显示。 综上所述,jInternalFrame窗口不显示可能是由于容器的设置问题,可见性属性设置问题,大小、位置属性设置问题或默认关闭操作设置问题。要解决这些问题,请仔细检查代码并进行调试,在错误得到修复之前,请勿放弃,像解决其他问题一样,持之以恒! ### 回答3: JInternalFrame是Java Swing中的内部窗口,它可以在应用程序的主窗口中创建子窗口来显示一些弹出式的交互窗口内容。但是,在一些情况下,我们可能会发现JInternalFrame窗口并没有显示出来。 首先,我们需要确定JInternalFrame对象已经正确创建并添加到JDesktopPane中。如果这一步骤都没有问题,那么我们需要检查一些可能导致JInternalFrame不显示的原因。 首先,我们需要检查JInternalFrame的可见性。在默认情况下,JInternalFrame是不可见的。所以,我们需要通过设置JInternalFrame的setVisible(true)方法来确保它是可见的。 其次,我们需要设置JInternalFrame的大小和位置。在默认情况下,JInternalFrame的大小会根据内容自动调整大小,但它并不一定满足我们的要求。因此,我们需要调用setBounds(x, y, width, height)方法来设置JInternalFrame的大小和位置。 还有一个处理JInternalFrame不显示的问题的方法是检查是否已经将JInternalFrame添加到正确的容器中。我们需要将JInternalFrame添加到JDesktopPane中以便显示,在这种情况下,我们需要确保JInternalFrame已经被正确添加到JDesktopPane中。 最后,我们还要检查我们的代码是否有错误。当我们使用函数或者方法时,我们需要确保这些函数和方法调用没有错误或异常。这是最基本的调试流程。通常来说,错误和异常总是能暴露问题的原因。 总之,当我们使用JInternalFrame时,我们需要确保它被设置为可见,大小和位置也被设置为正确,以及已经添加到正确的容器中。同时,我们还要注意不断查找代码中可能导致这一问题的错误或异常。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值