実行可能な 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 キーが押されたときにスクリーンショットを撮るにはどうすればよいでしょうか。