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

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

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

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

Swing

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

Q&A

解決済

1回答

2360閲覧

[Java Swing]キャプチャツールでのキャプチャ画像表示

junn

総合スコア65

Java

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

Swing

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

0グッド

0クリップ

投稿2015/07/16 00:26

編集2015/07/17 00:26

画面キャプチャツールをつくっていっるのですが以前
MainInitクラスのnew Thumbnail(filepath);
でキャプチャ時にサムネイル表示させていたのですが、表示
できなくなりました。訂正箇所あれば教えてください!
Thumbnail(String filePath)のStriingをFileにかえてもだめでした。。。
実際に追加するソースコード等を教えていただけると
助かります。

MainInit

lang

1 2 3public class MainInit implements ActionListener , WindowListener { //impriments(組み込む) 4 private JFrame mainFrame; 5 private Container contentPane; 6 private JPanel itemPanel; 7 private JPanel textPanel; 8 private JPanel buttonPanel; 9 private JTextField textField; 10 private JButton dirButton; 11 private JButton addButton; 12 private ScreenShot screenShot; 13 private String folderpath; 14 private JLabel folderlabel; 15 16 private SettingWindow settingwindow; 17 18 private ItemBox itemboxtest1; 19 private ItemBox itemboxtest2; 20 private ItemBox itemboxtest3; 21 private ItemBox itemboxtest4; 22 23 24 public MainInit(){ 25 mainFrame = new JFrame("エビデンスキャプチャ"); 26 mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //終了方法 27 mainFrame.setSize(500, 300); //ウィンドウのサイズ 28 mainFrame.setLocationRelativeTo(null); //ウィンドウを画面の中央に表示 29 contentPane = mainFrame.getContentPane(); //要素、成分 メインフレームのパネルを取得 30 31 32 contentPane.setLayout(null); 33 34 35 dirButton = new JButton("Dir"); //Dirボタンの作成 クラス名( ) = コンストラクタ 36 dirButton.setBounds(20, 0, 80, 30); 37 contentPane.add(dirButton); //コンパネにボタンを追加 38 39 addButton = new JButton("Capture"); 40 addButton.setBounds(400, 0, 90, 60); 41 contentPane.add(addButton); 42 43 44 45 JMenuBar menubar = new JMenuBar(); 46 JMenu menu1 = new JMenu("設定"); //メニューの生成 47 JMenu menu2 = new JMenu("ヘルプ"); 48 JMenuItem menuitem1 = new JMenuItem("設定"); 49 50 menubar.add(menu1); 51 menubar.add(menu2); 52 menu1.add(menuitem1); 53 54 mainFrame.getRootPane().setJMenuBar(menubar); //メインフレームに対してメニューバーを追加 55 56 folderlabel = new JLabel(); 57 textField = new JTextField(); //オブジェクトの作成 58 59 60 //「追加」ボタンとアクション・リスナーの関連付け 61 dirButton.addActionListener(this); 62 dirButton.setActionCommand("Dir"); // イベントに対するコマンド文字列登録 63 addButton.addActionListener(this); 64 addButton.setActionCommand("Capture"); // イベントに対するコマンド文字列登録 65 66 67 menuitem1.addActionListener(this); 68 menuitem1.setActionCommand("settingwindow"); // イベントに対するコマンド文字列登録 69 70 71 itemPanel = new JPanel(); //上下 72 itemPanel.setBounds(0, 0, 500, 100); 73 contentPane.add(itemPanel); 74 //itemPanel.setBackground(Color.RED); 75 76 textPanel = new JPanel(); //directryfield dir add 77 textPanel.setLayout(null); 78 contentPane.add(textPanel); 79 textPanel.setBounds(0,80, 500, 100); 80 //textPanel.setBackground(Color.GREEN); 81 82 buttonPanel = new JPanel(); 83 84 buttonPanel.setLayout(null); 85 contentPane.add(buttonPanel); 86 buttonPanel.setBounds(0,180,500,200); 87 //buttonPanel.setBackground(Color.ORANGE); 88 89 90 itemboxtest1 = new ItemBox(); //□↑↓ 91 itemPanel.add(itemboxtest1); 92 93 94 itemboxtest2 = new ItemBox(); 95 itemPanel.add(itemboxtest2); 96 97 itemboxtest3 = new ItemBox(); 98 itemPanel.add(itemboxtest3); 99 100 itemboxtest4 = new ItemBox(); 101 itemPanel.add(itemboxtest4); 102 103 104 textPanel.add(folderlabel); 105 folderlabel.setBounds(0, 30, 200, 30); 106 107 textPanel.add(textField); 108 textField.setBounds(320, 30, 150, 30); 109 110 buttonPanel.add(dirButton); 111 buttonPanel.add(addButton); 112 113 114 115 // フォルダパス初期値 116 folderpath = "C:\\tmp"; 117 // folderlabel,textFieldを初期値設定 118 folderlabel.setText(folderpath); 119 120 textField.setText("UT_FIL_%d-%d-%d-%d"); //初期表示フォルダパス 121 122 123 mainFrame.setVisible(true); 124 screenShot = new ScreenShot(); 125 126 } 127 128 129 // 利用者の操作に応じた処理を実装 130 public void actionPerformed(ActionEvent event){ 131 // コマンド文字列を取得 132 String cmd = event.getActionCommand(); 133 134 if(cmd.equals("Capture")){ 135 int x = mainFrame.getX(); 136 int y = mainFrame.getY(); 137 // 画面キャプチャー 138 try{ 139 File filepath = FilePathCreate(); 140 // 自分を消す(見えない位置に移動) 141 mainFrame.setLocation(-1000,-1000); 142 // 画面キャプチャ 143 screenShot.screenCapture(filepath); 144 145 // 自分を表示(元の位置に移動) 146 mainFrame.setLocation(x, y); 147 148 new Thumbnail(filepath); //サムネイルの表示 149 150 151 } catch (AWTException e){ 152 // TODO 自動生成された catch ブロック 153 e.printStackTrace(); 154 } catch (IOException e){ 155 // TODO 自動生成された catch ブロック 156 e.printStackTrace(); 157 } 158 } 159 else if(cmd.equals("Dir")) { 160 161 162 JFileChooser filechooser = new JFileChooser(folderpath); //上二行と相互関係 163 164 filechooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 165 166 int selected = filechooser.showSaveDialog(this.contentPane); 167 if (selected == JFileChooser.APPROVE_OPTION){ 168 File file = filechooser.getSelectedFile(); 169 folderpath = file.getAbsolutePath(); 170 folderlabel.setText(folderpath); 171 172 173 } 174 175 else if(cmd.equals("settingwindow")){ 176 177 178 settingwindow = new SettingWindow(); 179 } 180 } 181 182 183 } 184 185 186 public File FilePathCreate() { 187 String filename = FileNameCreate(); 188 String name = filename; 189 int m = 1; 190 do { 191 File f = new File(folderpath, name + ".jpg"); 192 if (!f.exists()) { 193 return f; 194 } 195 ++m; 196 name = filename + "(" + m + ")" ; 197 } while (m < 100); // 無限ループ防止 198 throw new IllegalStateException("パス生成失敗"); 199 } 200 201 // 数値リストからファイル名を生成 202 public String FileNameCreate() { 203 String filename; 204 String[] itemNumbers = new String[4]; 205 filename = textField.getText(); 206 int i=0; 207 int found = 0; 208 209 itemNumbers[0] = itemboxtest1.getText(); 210 itemNumbers[1] = itemboxtest2.getText(); 211 itemNumbers[2] = itemboxtest3.getText(); 212 itemNumbers[3] = itemboxtest4.getText(); 213 214 for(i=0; i<4; i++){ 215 found = filename.indexOf("%d",found); 216 if( found != 0 ){ 217 filename = filename.replaceFirst("%d",itemNumbers[i]); 218 } 219 } 220 return filename; 221 } 222 223 224 public void windowDeactivated(WindowEvent we) { //非アクティブのイベント 225 System.out.println("windowClosing"); 226 227 } 228 229 // アプリケーションの起動 230 public static void main(String[] args) { 231 new MainInit(); 232 } 233}

Thumbnail

lang

1public class Thumbnail extends JFrame { //JFrameを継承 2 3 4 5 6 public Thumbnail(File filepath) { 7 add(new DrawPanel(filepath)); 8 setTitle("イメージを拡大コピー"); 9 //setDefaultCloseOperation(EXIT_ON_CLOSE); 10 setSize(350, 350); 11 setVisible(true); 12 } 13 14 15} 16 17class DrawPanel extends JPanel { 18 19 static final int C01 = 30; // 画像のサイズ変更 20 Image I00; 21 int I01; 22 int I02; 23 24 25 26 public DrawPanel(File filepath) { 27 setBackground(Color.white); 28 29 I00 = new ImageIcon(filepath).getImage(); 30 I01 = I00.getWidth(this); 31 I02 = I00.getHeight(this); 32 } 33 34 35 36 37 public void paintComponent(Graphics A00) { 38 super.paintComponent(A00); 39 40 41 42 A00.drawString("縮小(" + C01 + "%)", 0, 10); 43 A00.drawImage(I00, 0, 20, I01 * C01 / 100, I02 * C01 / 100, this); //縮小した画像の配置座標 44 45 46 } 47

ScreenShot

lang

1public class ScreenShot { 2 3 public void screenCapture(File filepath) throws AWTException, IOException { 4 Robot robot = new Robot(); 5 Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 6 BufferedImage image = robot.createScreenCapture( 7 new Rectangle(0, 0, screenSize.width, screenSize.height)); 8 ImageIO.write(image, "PNG", filepath); //PNGファイルの保存 9 } 10} 11

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

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

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

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

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

argius

2015/07/17 11:11

コンパイルが通らなかったので、SettingWindowを消して(コメントアウトして)、filepathをStringにした状態で動かしてみましたが、ちゃんと動作しました。 何が問題なのかが良く分からないので、もう少し詳しく教えてください。
junn

2015/07/18 15:24

filpathをStringに直すと String filepath = FilePathCreate();が 型の不一致: File から String には変換できませんとエラーになってしまいます。 どこのSettingWindowでしょうか?
argius

2015/07/18 23:48

SettingWindowクラスが記載されていませんので、とりあえず無いものとしてコメントアウトしました。 FilePathCreateの戻り値の型はFileなので、Stringにしたら当然そのエラーになります。なぜStringにしたいのですか?
junn

2015/07/19 11:12

filepathをStringにした状態とあったので。。。 上記はどこのことでしょう?
guest

回答1

0

ベストアンサー

すみません、編集のコメントにエラーの詳細が書かれていたのですね。見落としていました。

回答は、以下のようにFile#getAbsolutePathのようにしてパス文字列を渡すようにします。

lang

1 I00 = new ImageIcon(filepath.getAbsolutePath()).getImage();

次回からは、問題があった場合にもう少し具体的に何が起こったのかを書いていただけると、回答がスムーズになります。
例えば、

  • コンパイルエラーになります、ソースコードのここでこういうエラーメッセージが出ています
  • 動かしたときにこういうエラーメッセージが出ています
  • エラーになっていないけれど、画像が表示されません

のような感じです。
ご検討ください。

投稿2015/07/19 12:24

argius

総合スコア9388

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

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

junn

2015/07/19 20:05

argiusさん 回答ありがとうございます。無事表示させること後出来ました。 わかりました。具体的に明記したいと思います。 ご指摘ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問