MDI型のJavaアプリを作る 子画面を最大化、最小化 (アイコン化)、閉じる

レッスン

※本ページはプロモーションが含まれています

MDI型アプリを作る方法について先日書きました。

参考: MDI型のJavaアプリを作る JDesktopPaneとJInternalFrameがキモ
MDI型アプリ

このようなアプリを作ったら、子画面の最大化や最小化、閉じる操作をしたいですよね。

でも、このままではそのような操作ができません。

そこで今回は、前回のコードに子画面の最大化、最小化、閉じるという機能を追加します。

子画面 (JInternalFrame)で最大化、最小化、閉じる

JInternalFrameで子画面を作って、あるプロパティを設定するだけで「最大化」、「最小化」、「閉じる」機能を追加できます。

それらの機能を追加するとこんな感じになります。

Ss 2013121918421801

Frame1は「最大化」「最小化」「閉じる」機能をONにしています。
これらはそれぞれ任意にON/OFFができます。

この例では、Frame1は全部ONです。
ボタンに色がついていますよね。

Ss 2013121918421802

Frame2は同機能をOFFにしています。
もうちょっというと、何も設定していません。

ボタンに色がついていないです。
押しても何も起こりません。

「最大化」「最小化」「閉じる」操作をする

では、Frame1で「最大化」「最小化」「閉じる」操作をしてみましょう。

Ss 2013121918421803

左上のこのボタンから操作します。
Macの場合は、左から「閉じる」「最小化」「最大化」ですね。

子画面の「最大化」

まずは右のボタン「最大化」を押すと・・・

Ss 2013121918421804

こんな感じで、親画面いっぱいに広がります。

子画面の「最小化」

続いて真ん中のボタン「最小化」を押すと・・・

Ss 2013121918421805

下の方に格納されましたね。
「最小化」というか、「アイコン化」ですね。

子画面を「閉じる」

一番左のボタン「閉じる」を押すと・・・

Ss 2013121918421806

子画面はなくなっちゃいました。

こんな機能を実装します。

子画面に「最大化」「最小化」「閉じる」機能を追加

早速ソースコードを見て行きましょう。

ほぼ前回のままです。
違うのは52〜54行目。

package jp.beourselves.open.sample.jdesktop;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;

public class JDesktopPaneSample2 {

	private JFrame frmMdi;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					JDesktopPaneSample2 window = new JDesktopPaneSample2();
					window.frmMdi.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the application.
	 */
	public JDesktopPaneSample2() {
		initialize();
	}

	/**
	 * Initialize the contents of the frame.
	 */
	private void initialize() {
		frmMdi = new JFrame();
		frmMdi.setTitle("MDI型アプリ サンプル");
		frmMdi.setBounds(100, 100, 450, 400);
		frmMdi.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		JDesktopPane desktopPane = new JDesktopPane();
		frmMdi.getContentPane().add(desktopPane, BorderLayout.CENTER);
		
		JInternalFrame frame1 = new JInternalFrame("Frame1");
		frame1.setMaximizable(true);
		frame1.setIconifiable(true);
		frame1.setClosable(true);
		frame1.setBounds(0, 0, 200, 300);
		desktopPane.add(frame1);
		
		JLabel lblHelloJdesktoppane = new JLabel("Hello, JDesktopPane!");
		lblHelloJdesktoppane.setHorizontalAlignment(SwingConstants.CENTER);
		frame1.getContentPane().add(lblHelloJdesktoppane, BorderLayout.CENTER);
		
		JInternalFrame frame2 = new JInternalFrame("Frame2");
		frame2.setBounds(200, 0, 200, 200);
		desktopPane.add(frame2);
		
		JLabel lblHelloJinternalframe = new JLabel("Hello, JInternalFrame");
		lblHelloJinternalframe.setHorizontalAlignment(SwingConstants.CENTER);
		frame2.getContentPane().add(lblHelloJinternalframe, BorderLayout.CENTER);
		frame2.setVisible(true);
		frame1.setVisible(true);
	}
}

こんなコードがありますね (52〜54行目)

		frame1.setMaximizable(true);
		frame1.setIconifiable(true);
		frame1.setClosable(true);

それぞれ、frame1に対してプロパティをセットしています。

最大化: setMaximizable(true)

「最大化」の機能を追加するなら、

setMaximizable(true)

を設定します。

これだけ。

最小化: setIconifiable(true)

「最小化」の機能を追加するなら、

setIconifiable(true)

を設定します。

閉じる: setClosable(true)

「閉じる」機能を追加するなら、

setClosable(true)

を設定します。

以上です。

おわりに

それぞれプロパティをセットするだけです。
何もしなければ、設定しなかった機能が作動しないだけ。

「最大化」「最小化」「閉じる」機能を追加するのは、超簡単でしたね!

ちなみに、JFrameを作るときにコンストラクタで指定することもできます。

JInternalFrame frame1 = new JInternalFrame("Frame1", true, true, true, true, true);

と、引数にそれぞれ

  • 「子画面のタイトル」
  • 「子画面のサイズ変更を許可」
  • 「閉じることができる」
  • 「最大化できる」
  • 「最小化できる」

という指定をします。

これでtrueじゃなくてfalseを設定すると、その機能が使えなくなります。

さて、次回は「閉じる」ときに何かしらの処理をするようにしてみましょう。

タイトルとURLをコピーしました