キャプチャツールのサムネイル表示
画面キャプチャツールをつくっているのですが以前
MainInit
クラスのnew Thumbnail(filepath);
でキャプチャ時にサムネイル表示させていたのですが、表示
できなくなりました。訂正箇所あれば教えてください!
Thumbnail(String filePath)
のString
をFile
にかえてもだめでした。。。
実際に追加するソースコード等を教えていただけると
助かります。
MainInit.java
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;
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.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);
itemboxtest1 = new ItemBox(); //□↑↓
itemPanel.add(itemboxtest1);
itemboxtest2 = new ItemBox();
itemPanel.add(itemboxtest2);
itemboxtest3 = new ItemBox();
itemPanel.add(itemboxtest3);
itemboxtest4 = new ItemBox();
itemPanel.add(itemboxtest4);
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_FIL_%d-%d-%d-%d"); //初期表示フォルダパス
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{
File 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")) {
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(cmd.equals("settingwindow")){
settingwindow = new SettingWindow();
}
}
}
public File FilePathCreate() {
String filename = FileNameCreate();
String name = filename;
int m = 1;
do {
File f = new File(folderpath, name + ".jpg");
if (!f.exists()) {
return f;
}
++m;
name = filename + "(" + m + ")" ;
} while (m < 100); // 無限ループ防止
throw new IllegalStateException("パス生成失敗");
}
// 数値リストからファイル名を生成
public String FileNameCreate() {
String filename;
String[] itemNumbers = new String[4];
filename = textField.getText();
int i=0;
int found = 0;
itemNumbers[0] = itemboxtest1.getText();
itemNumbers[1] = itemboxtest2.getText();
itemNumbers[2] = itemboxtest3.getText();
itemNumbers[3] = itemboxtest4.getText();
for(i=0; i<4; i++){
found = filename.indexOf("%d",found);
if( found != 0 ){
filename = filename.replaceFirst("%d",itemNumbers[i]);
}
}
return filename;
}
public void windowDeactivated(WindowEvent we) { //非アクティブのイベント
System.out.println("windowClosing");
}
// アプリケーションの起動
public static void main(String[] args) {
new MainInit();
}
}
ItemBox.java
public class ItemBox extends JPanel implements ActionListener{ //ItemBoxはJPanelというオブジェクトクラスを継承
//ActionListnerというインタフェースを実装
private JButton upButton;
private JButton downButton;
private JTextField itemField;
private Container contentPane;
private JPanel itemPanel;
GridBagLayout gbl = new GridBagLayout();
void addButton(Object itemobject, int x, int y, int w, int h) {
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.BOTH;
gbc.gridx = x;
gbc.gridy = y;
gbc.gridwidth = w;
gbc.gridheight = h;
gbl.setConstraints((Component) itemobject, gbc);
add((Component) itemobject);
}
public ItemBox(){
//setLayout(null);
//setBackground(Color.blue);
itemField = new JTextField("0");
itemField.setPreferredSize(new Dimension(20, 10)); //アイテムフィールドの大きさ指定
itemField.setFocusable(false); //入力制限
upButton = new JButton("↑"); //upButtonオブジェクトを作成し、↑を代入する。
downButton = new JButton("↓"); //downButtonオブジェクトを作成し、↓を代入する。
upButton.setActionCommand("upButton");
upButton.addActionListener(this); //アクションイベントを受け取れるようになる。
downButton.setActionCommand("downButton");
downButton.addActionListener(this);
setLayout(gbl);
addButton(itemField, 0, 0, 1, 2); // (0, 0) 幅=1, 高さ=3
addButton(upButton, 1, 0, 1, 1); // (1, 0) 幅=1, 高さ=1
addButton(downButton, 1, 1, 1, 1); // (1, 1) 幅=1, 高さ=1
}
public String getText(){
return itemField.getText();
}
//操作に応じた処理の実装
public void actionPerformed(ActionEvent event){ //イベントが発生するとここが処理される
//ユーザーの操作e対象の判断 //このクラスでのアクションリスナー
String cmd = event.getActionCommand();
if(cmd.equals("upButton")) {
int i = Integer.parseInt(itemField.getText());
i++;
if(i>99)i=0;
//itemField.setText(String.format("%1$02d",i)); //0埋め
itemField.setText(String.valueOf(i));
}
else if(cmd.equals("downButton")){
int i = Integer.parseInt(itemField.getText());
i--;
if(i<0)i=99;
//itemField.setText(String.format("%1$02d",i)); //0埋め
itemField.setText(String.valueOf(i));
}
}
}
ScreenShot.java
public class ScreenShot {
public void screenCapture(File filepath) throws AWTException, IOException {
Robot robot = new Robot();
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
BufferedImage image = robot.createScreenCapture(
new Rectangle(0, 0, screenSize.width, screenSize.height));
ImageIO.write(image, "PNG", filepath); //PNGファイルの保存
}
}