目次へ

解答例 - 実習課題3 - 16.内部フレームとデスクトップペイン

(実習課題3)

実習課題2のプログラムを改良しなさい。

  • 内部フレームを作成する際、フレームのタイトルも指定できるようにする事。
  • アプリケーションフレームのタイトルを、現在アクティブな内部フレームのタイトルと同じにする事。

解答例

/**
 * SetTitleMdi.java
 * TECHSCORE Javaユーザインタフェース16章 実習課題3
 *
 * Copyright (c) 2004 Four-Dimensional Data, Inc.
 */

package com.techscore.ui.chapter16.exercise3;

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JDesktopPane;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JTextField;
import javax.swing.event.InternalFrameAdapter;
import javax.swing.event.InternalFrameEvent;

public class SetTitleMdi extends JFrame implements ActionListener {

    private JMenuItem addMenu;
    private JDesktopPane desktopPane;

    private int numOfInternal;

    private MyInternalFrameListener listener;

    public SetTitleMdi() {
        super("SetTitleMdi");
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        //メニュー
        JMenu menu = new JMenu("File");
        addMenu = new JMenuItem("add");
        addMenu.addActionListener(this);
        menu.add(addMenu);
        JMenuBar menuBar = new JMenuBar();
        menuBar.add(menu);
        setJMenuBar(menuBar);

        //JDesktopPane
        desktopPane = new JDesktopPane();
        desktopPane.setPreferredSize(new Dimension(600, 400));
        getContentPane().add(desktopPane);

        pack();

        numOfInternal = 0;
        listener = new MyInternalFrameListener();
    }

    public void actionPerformed(ActionEvent event) {
        new PropertyDialog(this).setVisible(true);
    }

    private class PropertyDialog extends JDialog implements ActionListener {

        private JCheckBox[] checkBoxes;
        private JButton okButton;
        private JTextField text;

        private JFrame rootFrame;

        public PropertyDialog(JFrame rootFrame) {
            super(rootFrame, "Input Property", true);
            this.rootFrame = rootFrame;

            Box box = new Box(BoxLayout.Y_AXIS);

            //JTextField
            text = new JTextField("internal frame");
            text.setPreferredSize(new Dimension(150, 20));
            box.add(text);

            //JCheckBox
            checkBoxes = new JCheckBox[4];
            checkBoxes[0] = new JCheckBox("resizable");
            checkBoxes[1] = new JCheckBox("closable");
            checkBoxes[2] = new JCheckBox("maximizable");
            checkBoxes[3] = new JCheckBox("iconfiable");

            for (int i = 0; i < checkBoxes.length; i++) {
                box.add(checkBoxes[i]);
            }

            //JButton
            okButton = new JButton("OK");
            okButton.addActionListener(this);
            box.add(okButton);

            getContentPane().add(box);
            pack();
        }

        public void actionPerformed(ActionEvent event) {

            JInternalFrame internal =
                new JInternalFrame(
                    text.getText(),
                    checkBoxes[0].isSelected(),
                    checkBoxes[1].isSelected(),
                    checkBoxes[2].isSelected(),
                    checkBoxes[3].isSelected());

            internal.addInternalFrameListener(listener);
            internal.reshape(numOfInternal * 10, numOfInternal * 10, 200, 200);
            desktopPane.add(internal);
            internal.setVisible(true);

            numOfInternal++;
            if (numOfInternal > 20) {
                numOfInternal = 0;
            }

            dispose();
        }

    }

    private class MyInternalFrameListener extends InternalFrameAdapter {
        public void internalFrameActivated(InternalFrameEvent event) {
            setTitle(event.getInternalFrame().getTitle());
        }
    }

    public static void main(String args[]) {
        new SetTitleMdi().setVisible(true);
    }

}

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp
  • シナジーマーケティング研究開発グループブログ