Java生成父窗体、子窗体的方法。

216 篇文章 1 订阅

转自:微点阅读  https://www.weidianyuedu.com

Java如何生成父窗体、子窗体

使用Java 的swing 组件实现父子窗口的特性,它使用的结构是JDesktopPane-JInternalFrame。JDesktopPane 相当于一个“父窗口”,可以拥有多个作为“子窗口”的JInternalFrame 对象。本例将演示Java 的这种父子窗口特性,其效果如图1-6 所示,当选中Option 菜单下的AddFrame 菜单项时,会在父窗口内增加一个子窗口。

实现方法:

本例中,要使用两个关键的类:JDesktopPane 和JInternalFrame。这两个类都提供了很多方法和属性,我们不可能也不必在本例的简单演示中用到那么多的方法,读者可以在实际运用中自行查阅

Java API Document。创建一个JDesktopPane 的实例后,可以调用它的add()方法来添加JInternalFrame 对象,如:

desktop.add(frame);

另外,本例中将通过继承JInternalFrame 类来创建定制的子窗口类OwnInternalFrame。其中调用了一个JInternalFrame 的构造方法,其原型如下:

JInternalFrame(String titile, Boolean resizable , Boolean closable , Boolean maximizable , Boolean iconifiable);title :内部窗口的标题。resizable :窗体是否可移动。closable :窗口是否可关闭。maxizable :窗体是否可最大化。iconifiable :窗口是否可设置窗口图标。

程序代码:

1.新建一个Project,取名为JInternalFrameDemo。

2.新建一个Application,取名为JInternalFrameDemo;主窗口名为MainFrame,标题为JInternalFrameDemo。

3.向MainFrame 类的设计窗口中添加一个JMenuBar 组件,并在菜单设计器中,添加一个菜单“Option”和一个菜单项“AddFrame”;在MainFrame 类中添加新的属性JDesktopPanedesktopPane,具体实现代码如下:

public class MainFrame extends JFrame {private JDesktopPane desktop = new JDesktopPane();private JMenuBar jMenuBar1 = new JMenuBar();private JMenu jMenu1 = new JMenu();private JMenuItem jMenuItem1 = new JMenuItem();……}

4.在MainFrame 类的初始化方法jbInit()中,添加组件的初始化设置。

private void jbInit() throws Exception {desktop.putClientProperty("JDesktopPane.dragMode", "outline");this.setContentPane(desktop);this.setJMenuBar(jMenuBar1);this.setSize(new Dimension(400, 300));this.setTitle("JInternalFrameDemo");jMenu1.setFont(new java.awt.Font("Dialog", 0, 12));jMenu1.setText("Option");jMenuItem1.setFont(new java.awt.Font("Dialog", 0, 12));jMenuItem1.setText("Add Frame");//添加菜单项的事件监听器jMenuItem1.addActionListener(new java.awt.event.ActionListener() {public void actionPerformed(ActionEvent e) {jMenuItem1_actionPerformed(e);}});jMenuBar1.add(jMenu1);jMenu1.add(jMenuItem1);}

5.编写菜单项的事件处理方法。

void jMenuItem1_actionPerformed(ActionEvent e) {OwnInternalFrame frame = new OwnInternalFrame(); //创建一个新的内部窗口实例frame.setVisible(true); //necessary as of kestreldesktop.add(frame); //在父窗口中添加这个子窗口try {frame.setSelected(true);} catch (java.beans.PropertyVetoException err) {err.printStackTrace();}}

6.编写OwnInternalFrame 类,继承自JInternalFrame 类。

package jinternalframedemo;import javax.swing.JInternalFrame;public class OwnInternalFrame extends JInternalFrame {static int frameNo = 0; //窗口的编号static final int xOffset = 20, yOffset = 20; //窗口位置的偏移量public OwnInternalFrame() {

super("InternalFrame " + (++frameNo), true, true, true, true); //初始化窗口

setSize(150,150); //设置大小

setLocation(xOffset*frameNo, yOffset*frameNo); //设置在父窗口中的位置

}

}

最终的实现效果

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值