質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.04%

Java GUI 表示ウィンドウの閉じ方の差別化

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,249
退会済みユーザー

退会済みユーザー

質問です。JAVAのSwingでキャプチャツールを作っているのですが、MainInitから
Thumbnailを呼び出してサムネイルを表示させるようにしています。
しかしThumbnailをクローズするとMainInitも閉じてしまいます。この時MainInitを
閉じないようにするにはどうすればよいでしょうか?


MainInit
[MainInit] 
public class MainInit implements ActionListener , WindowListener {     


    public MainInit(){ 
        mainFrame = new JFrame("エビデンスキャプチャ"); 
        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //終了方法 
        mainFrame.setSize(500, 300);                //ウィンドウのサイズ 
        mainFrame.setLocationRelativeTo(null);        //ウィンドウを画面の中央に表示 
        contentPane = mainFrame.getContentPane();   //要素、成分 メインフレームのパネルを取得 


        contentPane.setLayout(null); 


        dirButton   = new JButton("Dir");        //Dirボタンの作成 クラス名( ) = コンストラクタ 
        dirButton.setBounds(20, 0, 80, 30); 
        contentPane.add(dirButton);                //コンパネにボタンを追加 

        addButton   = new JButton("Capture"); 
        addButton.setBounds(400, 0, 90, 60); 
        contentPane.add(addButton); 

        JMenuBar menubar = new JMenuBar(); 
        JMenu menu1 = new JMenu("設定");            //メニューの生成 
        JMenu menu2 = new JMenu("ヘルプ"); 
        JMenuItem menuitem1 = new JMenuItem("設定"); 

        menubar.add(menu1); 
        menubar.add(menu2); 
        menu1.add(menuitem1); 

        mainFrame.getRootPane().setJMenuBar(menubar);        //メインフレームに対してメニューバーを追加 

        folderlabel = new JLabel(); 
        textField   = new JTextField();            //オブジェクトの作成 
        //dirButton   = new JButton("Dir");        //Dirボタンの作成 
        //addButton   = new JButton("Capture");    //Captureボタンの作成 


        //「追加」ボタンとアクション・リスナーの関連付け 
        dirButton.addActionListener(this); 
        dirButton.setActionCommand("Dir"); // イベントに対するコマンド文字列登録 
        addButton.addActionListener(this); 
        addButton.setActionCommand("Capture"); // イベントに対するコマンド文字列登録 
         

        menuitem1.addActionListener(this); 
        menuitem1.setActionCommand("settingwindow"); // イベントに対するコマンド文字列登録 


        itemPanel    = new JPanel();                                //上下 
        itemPanel.setBounds(0, 0, 500, 100); 
        contentPane.add(itemPanel); 
        //itemPanel.setBackground(Color.RED); 

        textPanel    = new JPanel();                                //directryfield dir add 
        textPanel.setLayout(null); 
        contentPane.add(textPanel); 
        textPanel.setBounds(0,80, 500, 100); 
        //textPanel.setBackground(Color.GREEN); 

        buttonPanel = new JPanel(); 

        buttonPanel.setLayout(null); 
        contentPane.add(buttonPanel); 
        buttonPanel.setBounds(0,180,500,200); 
        //buttonPanel.setBackground(Color.ORANGE); 
   

        textPanel.add(folderlabel); 
        folderlabel.setBounds(0, 30, 200, 30); 

        textPanel.add(textField); 
        textField.setBounds(320, 30, 150, 30); 

        buttonPanel.add(dirButton); 
        buttonPanel.add(addButton); 


        // フォルダパス初期値 
        folderpath = "C:\\tmp"; 
        // folderlabel,textFieldを初期値設定 
        folderlabel.setText(folderpath); 
        textField.setText("UT_Item%d-%d-%d-%d.jpg"); 


        mainFrame.setVisible(true); 
        screenShot = new ScreenShot(); 

    } 

    // 利用者の操作に応じた処理を実装 
    public void actionPerformed(ActionEvent event){ 
        // コマンド文字列を取得 
        String cmd = event.getActionCommand(); 

        if(cmd.equals("Capture")){ 
            int x = mainFrame.getX(); 
            int y = mainFrame.getY(); 
            // 画面キャプチャー 
            try{ 
                String filepath = FilePathCreate(); 
                // 自分を消す(見えない位置に移動) 
                mainFrame.setLocation(-1000,-1000); 
                // 画面キャプチャ 
                screenShot.screenCapture(filepath); 

                // 自分を表示(元の位置に移動) 
                mainFrame.setLocation(x, y); 
                new Thumbnail(filepath);

            } catch (AWTException e){ 
                // TODO 自動生成された catch ブロック 
                e.printStackTrace(); 
            } catch (IOException e){ 
                // TODO 自動生成された catch ブロック 
                e.printStackTrace(); 
            } 
        } 
        else if(cmd.equals("Dir")) { 


            folderpath = settingwindow.getfolderpath();        //folderpath()を取得する。 
            folderlabel.setText(folderpath);                //folderlabelにfolderpathをセットする。 
              //= new Thumbnail(); 

        } 
           JFileChooser filechooser = new JFileChooser(folderpath); 
                 filechooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 

                 int selected = filechooser.showSaveDialog(this.contentPane); 
                 if (selected == JFileChooser.APPROVE_OPTION){ 
                     File file = filechooser.getSelectedFile(); 
                     folderpath = file.getAbsolutePath(); 
                     folderlabel.setText(folderpath); 

                                 //else if~設定ボタンの行動 
                 } 
        
    // アプリケーションの起動 
    public static void main(String[] args) { 
        new MainInit(); 
    } 
} 

Thumbnail
limport java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Thumbnail extends JFrame {        //JFrameを継承




      public Thumbnail(String filePath) {
        add(new DrawPanel(filePath));
        setTitle("イメージを拡大コピー");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(350, 350);
        setVisible(true);
    }


}

class DrawPanel extends JPanel {
    static final String C00 = "C:/Users/yabuuchi-k/Desktop/EvidenceCapture/試験結果/UT_2-2-1.jpg";
    static final int C01 = 30;        // 画像のサイズ変更
    Image I00;
    int I01;
    int I02;



    public DrawPanel(String filePath) {
        setBackground(Color.white);

         I00 = new ImageIcon(filePath).getImage();
         I01 = I00.getWidth(this);
         I02 = I00.getHeight(this);
     }




    public void paintComponent(Graphics A00) {
        super.paintComponent(A00);



        A00.drawString("縮小(" + C01 + "%)", 0, 10);
        A00.drawImage(I00, 0, 20, I01 * C01 / 100, I02 * C01 / 100, this);    //縮小した画像の配置座標


    }
   /* public void actionPerformed(ActionEvent event){
        // コマンド文字列を取得
        String cmnd = event.getActionCommand();

    }*/
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • eripong

    2015/07/03 11:00 編集

    Thumbnailをnewするコードがありませんが、古いソースではないですか?
    それと、前の質問とは内容が違うので、タイトルも「Java GUIのアクションリスナーの関連付け」
    ではなく内容に合わせて修正した方が良いと思います。

    キャンセル

回答 1

checkベストアンサー

+1

よく見ると、Thumbnailのコンストラクタで
setDefaultCloseOperation(EXIT_ON_CLOSE);
していますね。

これはウィンドウのクローズ時にアプリケーション全体を
終了するという意味なので、
この行を削除すれば良いと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/07/03 12:22

    解決しました!
    ありがとうございます!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.04%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る