解答例 - 実習課題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); } }