[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends:00252] ウィンドウ表示の制限について



お世話になります。横山と申します。
現在swingを用いてのGUIアプリを作成して
javaの勉強をしております。
ボタンを一つ配置したSwingというクラスを作成しまして
そのボタンをクリックするとDataクラスが呼ばれて
さらにWindowが表示されるようなものを作成しました。
現在はこのボタンを何度もクリックすると
Dataクラスのウィンドウがいくつも表示されてしまいます。
このSwingクラスで作成したWindowのボタンから表示される
Dataクラスのウィンドウを一つだけ表示されるようにしたいのです。
これはどのようにしたら実現できるのでしょうか?
誠に恐れ入りますが、アドバイスをいただければ幸いであります。
下記に見苦しいと思うのですが作成したソースコード(簡略したもの)を
記述しております。
よろしくお願いします。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Swing extends JFrame{
	public static void main(String args[]){
		Swing swing = new Swing();
		swing.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent event){
				System.exit(0);
			}
		});
		Dimension screenSize = Toolkit.getDefaultToolkit().getSc
reenSize();
		Dimension frameSize = swing.getSize();
		if(screenSize.width-frameSize.width<0){
		screenSize.width=frameSize.width;
		}
		if(screenSize.height-frameSize.height<0){
		screenSize.height=frameSize.height;
		}
		swing.setLocation(screenSize.width-frameSize.width,0);		
		swing.setVisible(true);
		
	}
	Swing(){
		setTitle("アプリケーション");
		setSize(400,300);
		
		JPanel panel = new JPanel();
		JButton button = new JButton("ボタン");
		button.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent event){
				Data data = new Data();

				}
		});
		panel.add(button);
	
		Container content = getContentPane();		
		content.add(panel);
	}
}
class Data extends JFrame{
	public Data()
	{
		setTitle("表示");
		setSize(WIDTH , HEIGHT);
		setResizable(false);
//		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
//		show();

		JPanel buttonPanel = new JPanel();
		JButton list = new JButton("表示");
		buttonPanel.add(list);
		JButton insert = new JButton("追加");
		buttonPanel.add(insert);

		Container contentPane = getContentPane();
		contentPane.add(buttonPanel,BorderLayout.CENTER);
	}
	public static final int WIDTH = 500;
	public static final int HEIGHT = 200;
}