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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Swing

SwingはJavaに標準で付属するグラフィック関連のクラスライブラリを指します。

Q&A

解決済

1回答

2084閲覧

Java GUIのアクションリスナーの関連付け

退会済みユーザー

退会済みユーザー

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Swing

SwingはJavaに標準で付属するグラフィック関連のクラスライブラリを指します。

0グッド

1クリップ

投稿2015/07/02 01:44

編集2015/07/02 01:46

MainInitの"Capture"というaddButton押下時にThumbnailを呼び出して
ウィンドウを表示させたいのですが、どうすれば良いでしょうか?
actionlistenerで呼び出すというところまでわかりますが、何を付け足せば
良いかわかりません。
※他にもファイルがありますが省略しています。

[MainInit]
import java.awt.AWTException;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class MainInit implements ActionListener , WindowListener { //impriments(組み込む)
private JFrame mainFrame;
private Container contentPane;
private JPanel itemPanel;
private JPanel textPanel;
private JPanel buttonPanel;
private JTextField textField;
private JButton dirButton;
private JButton addButton;
private ScreenShot screenShot;
private String folderpath;
private JLabel folderlabel;

private SettingWindow settingwindow; private ItemBox itemboxtest1; private ItemBox itemboxtest2; private ItemBox itemboxtest3; private ItemBox itemboxtest4; private Thumbnail DrawPanel; 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); } 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
Thumbnail
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;

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

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

public Thumbnail() { add(new DrawPanel()); } public static void main(String[] A00) { Toolkit.getDefaultToolkit().setDynamicLayout(true); JFrame L00 = new Thumbnail(); L00.setTitle("イメージを拡大コピー"); L00.setDefaultCloseOperation(EXIT_ON_CLOSE); L00.setSize(300, 300); L00.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 = 20; // 画像のサイズ変更
Image I00;
int I01;
int I02;

public DrawPanel() { setBackground(Color.white); I00 = new ImageIcon(C00).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();

}*/

}

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

まず、Thumbnailで読み込むファイルのパスがDrawPanel.C00で定数になっているようなので、
Thumbnailのコンストラクタに引数を追加するなどして外部から与えられる様にしてください。

また、現状Thumbnailのmainメソッドに埋め込まれている以下の箇所も
Thumbnailのコンストラクタに移動した方がよいでしょう。

lang

1 L00.setTitle("イメージを拡大コピー"); 2 L00.setDefaultCloseOperation(EXIT_ON_CLOSE); 3 L00.setSize(300, 300); 4 L00.setVisible(true);

それから、ActionPerformedからThumbnailをnewするコードを追加してください。
以下のイメージです。

lang

1 String filepath = FilePathCreate(); 2 // 自分を消す(見えない位置に移動) 3 mainFrame.setLocation(-1000,-1000); 4 // 画面キャプチャ 5 screenShot.screenCapture(filepath); 6 7 // 自分を表示(元の位置に移動) 8 mainFrame.setLocation(x, y); 9 10 // Thumbnailを表示 11 new Thumbnail(filepath);

Thumbnailのコンストラクタですが、以下のイメージと思います。

lang

1 2 public Thumbnail(String filePath) { 3 add(new DrawPanel(filePath)); 4 setTitle("イメージを拡大コピー"); 5 setDefaultCloseOperation(EXIT_ON_CLOSE); 6 setSize(300, 300); 7 setVisible(true); 8 }

それに伴い、DrawPanelのコンストラクタも以下の様に修正が必要です。

lang

1    public DrawPanel(String filePath) { 2       setBackground(Color.white);  3 4        I00 = new ImageIcon(filePath).getImage();  5        I01 = I00.getWidth(this);  6        I02 = I00.getHeight(this); 7    }

投稿2015/07/02 02:24

編集2015/07/02 03:09
eripong

総合スコア1546

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/07/02 02:31

eripongさん 解答ありがとうございます。訂正してみます。 newの作り方がいまいちわからないので詳しく教えていただいてよろしいでしょうか? 上のソースは渡されたものなのでまだわからない箇所が多いです
eripong

2015/07/02 02:39

コメントするつもりで間違って別の回答を作ってしまったので そちらは無視してください。 すみません。 同じ内容をこちらにコメントしておきます。 コンストラクタの引数にファイルのパスを追加していれば、 new Thumbnail(filepath); でできます。 それはそうとして、newの作り方が分からないと、 Javaでプログラムを作るのは難しいと思うのですが、 どの程度Javaをご存知でしょうか?
退会済みユーザー

退会済みユーザー

2015/07/02 02:49

コメントありがとうございます。 パスの渡し方、実行してみます。 MainInitのボタン押下時にThumbnailをだすのはどうすれば良いでしょうか? アクションリスナーのCapture部分に何か足しますか? newでオブジェクトを作れることはわかりますが細かいところまでわかりません。 オブジェクト指向前までならまだわかるかもです。
eripong

2015/07/02 03:13

回答を修正し、コードのイメージを詳細化してみました。 アクションリスナーのCapture部分に追加する内容も書いています。 実行してはいないので、そのままでは動かないかも知れません。
退会済みユーザー

退会済みユーザー

2015/07/02 04:08

詳しい解説ありがとうございます! Capture部分に追加の内容はどれでしょうか? 何度もすみませんorz
eripong

2015/07/02 04:13

「それから、ActionPerformedからThumbnailをnewするコードを追加してください。 以下のイメージです。」の後に書いたコードがCapture部分のtry-catchの内容で、 追加内容は以下の部分です。 // Thumbnailを表示 new Thumbnail(filepath);
退会済みユーザー

退会済みユーザー

2015/07/02 04:22

失礼します Thumbnailのmainにある Toolkit.getDefaultToolkit().setDynamicLayout(true); JFrame L00 = new Thumbnail(); はそのままでもよろしいでしょうか?
eripong

2015/07/02 04:26

MainInitのmainからはThumbnailのmainは呼び出されないので、 mainメソッドごと削除しても動くと思います。
退会済みユーザー

退会済みユーザー

2015/07/02 14:16

こんばんは。お世話になっております。 実行してみましたがサムネイル表示できませんでした。 もう少しいじってみます! なにかまたご指摘ありましたらお願いします。
eripong

2015/07/02 15:46

おっと、そうですか。 FilePathCreate()でScreenShotが出力したファイルのパスを取得できることを 仮定してしまっていたので、そのせいかも知れません。
退会済みユーザー

退会済みユーザー

2015/07/03 00:06

お疲れ様です。無事表示させることができました! ありがとうございます。 サムネイルのウィンドウを閉じるとMainInitも閉じちゃうんですが どうにもなりませんかね?
eripong

2015/07/03 00:39

表示できて良かったです。 サムネイルのウィンドウを閉じてもMaininitが閉じない様にできるとは思いますが、 それは別の質問にしたほうが良いと思います。 その際は、ヘルプにある、「コードを入力」のマークダウンを使って、 サムネイルが表示できるようになったコードを見やすく出すといいと思います。 ヘルプ: https://teratail.com/help
退会済みユーザー

退会済みユーザー

2015/07/03 01:44

わかりました! 何度もありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問