0

実行可能な jar を作成して配布するプログラムを作成する必要があります。関数は次のようになります。

jar をダブルクリックすると、ウィンドウが開きます。画像ファイルを保存するパスを尋ねられます。次に、一意の名前のタイムスタンプとともに、すべての画像にプレフィックス/サフィックス/両方を追加するかどうかを尋ねます。また、使用する画像形式も尋ねられます。アプリは最小化して閉じることができ、PrintScreen を押して保存するたびに完全なスクリーンショットが撮られます。完成したプログラムを提供してください。ピースを集めましたが、1つにまとめることができませんでした。これが私のコードです:-

import java.awt.*;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.event.*;
import java.awt.image.RenderedImage;
import java.io.File;
import java.util.Date;

import javax.imageio.ImageIO;
import javax.swing.*;

public class MainClass
{
static String location = "";
static String prefix = "";
static String format = "";
static Date timestamp = new Date();

public static void main(String args[])
{
    try 
    {
        UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
JFrame f = new JFrame("Text Field Examples");
f.getContentPane().setLayout(new FlowLayout());

final JTextField textField1 = new JTextField("Enter Location To Save Image Files");
textField1.addMouseListener(new MouseAdapter(){
    @Override
    public void mouseClicked(MouseEvent e){
        textField1.setText("");
    }
});
textField1.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        location = textField1.getText();
        System.out.println(location);
    }
});
f.getContentPane().add(textField1);

final JTextField textField2 = new JTextField("Enter Prefix or Leave Empty");
textField2.addMouseListener(new MouseAdapter(){
    @Override
    public void mouseClicked(MouseEvent e){
        textField2.setText("");
    }
});
textField2.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        prefix = textField2.getText();
        System.out.println(prefix);
    }
});
f.getContentPane().add(textField2);

String  jlistData[] =
    {
        "GIF",
        "PNG",
        "JPG"
    };
final JComboBox  jlist = new JComboBox<String>( jlistData );
jlist.addActionListener(new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent e) {
        format = jlist.getSelectedItem().toString();
        System.out.println(format);

    }
});
f.getContentPane().add(jlist);

f.pack();
f.setVisible(true);
} 
catch (Exception evt) 
{
    evt.printStackTrace();
}



try
{
    Robot robot = new Robot();

    robot.keyPress(KeyEvent.VK_PRINTSCREEN);
    robot.keyRelease(KeyEvent.VK_PRINTSCREEN);


    Transferable t = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null);
    RenderedImage image = (RenderedImage) t.getTransferData(DataFlavor.imageFlavor);

    ImageIO.write(image, format, new File(new String(location+prefix+image+timestamp)));
}
catch(Exception e)
{

}   

}
}

最初の try catch ブロックは、ウィンドウを開き、画像形式、プレフィックス、および保存場所を取得できます。2 番目の try catch ブロックだけでは、printscreen キーが押されたときではなく、実行時にスクリーン ショットを取得できますが、最初の try catch では何も出力されません。では、printscreen キーが押されたときにスクリーンショットを撮るにはどうすればよいでしょうか。

4

1 に答える 1