我用Robot类创建了一个简单的程序,它可以生成计算机的屏幕截图。当您单击JButton时,它会创建屏幕捕获。
我试图在制作屏幕截图时让JFrame消失。不幸的是,JButton不会显示...... 你能告诉我我的代码有什么问题吗?
package Threads;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import javax.swing.*;
public class ScreenCapture extends JFrame implements ActionListener{
private JButton b;
public ScreenCapture() throws Exception{
this.setTitle("Etfeld");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
this.pack();
this.setResizable(false);
this.setLocation(1366/2-100,678/2);
ImageIcon jamil=new ImageIcon("Logo.png");
Image logo=jamil.getImage();
this.setIconImage(logo);
JPanel jp=new JPanel();
b=new JButton("Capture!");
b.addActionListener(this);
this.add(jp);
jp.add(b);
}
@Override
public void actionPerformed(ActionEvent ae) {
Object obj=ae.getSource();
if(obj instanceof JButton){
try {
Robot robot = new Robot();
this.setVisible(false);
BufferedImage im=robot.createScreenCapture(new Rectangle(0,0,1366,768));
Toolkit.getDefaultToolkit().beep();
this.setVisible(true);
File outputfile = new File("saved.png");
ImageIO.write(im, "png", outputfile);
} catch (Exception v) {v.printStackTrace();}
}
}
public static void main(String []args) throws Exception{
ScreenCapture sc=new ScreenCapture();
}
}
答案 0 :(得分:4)
在添加按钮之前,框架已显示。确保在添加组件后显示此语句。在使框架可见之前调用pack
以确保框架足够大以使按钮可见
pack();
setVisible(true);
答案 1 :(得分:3)
您需要重新排列对方法的调用。你应该在框架可见之前调用pack()
;添加完所有UI组件后
然后,使用setVisible(true)
使JFrame
可见。