Java 希望我的屏幕截图显示在JFrame中吗
我有一个程序,当按下JButton时会截图,但由于某些原因,它不会显示在我的JFrame中。我知道这种方法是有效的,因为JFrame会按照我告诉它的那样重新调整大小,但由于某些原因,它不会显示快照Java 希望我的屏幕截图显示在JFrame中吗,java,image,swing,screenshot,jlabel,Java,Image,Swing,Screenshot,Jlabel,我有一个程序,当按下JButton时会截图,但由于某些原因,它不会显示在我的JFrame中。我知道这种方法是有效的,因为JFrame会按照我告诉它的那样重新调整大小,但由于某些原因,它不会显示快照 public void actionPerformed(ActionEvent e) { System.out.println("sh"); try { shot = new Robot
public void actionPerformed(ActionEvent e)
{
System.out.println("sh");
try {
shot = new Robot().createScreenCapture(new
Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
} catch (HeadlessException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (AWTException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
frame.setSize(screenSize);
Image ii = (BufferedImage) shot;
g2d.drawImage(shot, Image.SCALE_AREA_AVERAGING, 0, 0, 0, null);
}
});
ImageIcon image = new ImageIcon("res//images//SnippingTool.png");
label = new JLabel(image);
frame.add(button, BorderLayout.NORTH);
frame.add(label, BorderLayout.SOUTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public static void main(String args[]){
main m = new main();
}
代码
public class main implements ActionListener{
public static Font f = new Font(Font.DIALOG, Font.BOLD, 25);
static JButton button = new JButton("Press For A Screen Shot!");
static JFrame frame = new JFrame("Snipping Tool+");
static JLabel label;
static Graphics2D g2d;
static JPanel panel;
BufferedImage shot;
public main(){
frame.setSize(400, 350);
frame.setResizable(false);
button.setFont(f);
button.setBackground(Color.BLACK);
button.setForeground(Color.white);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
System.out.println("sh");
try {
shot = new Robot().createScreenCapture(new
Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
} catch (HeadlessException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (AWTException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
frame.setSize(screenSize);
Image ii = (BufferedImage) shot;
g2d.drawImage(shot, Image.SCALE_AREA_AVERAGING, 0, 0, 0, null);
}
});
ImageIcon image = new ImageIcon("res//images//SnippingTool.png");
label = new JLabel(image);
frame.add(button, BorderLayout.NORTH);
frame.add(label, BorderLayout.SOUTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public static void main(String args[]){
main m = new main();
}
我的行动就在这里
public void actionPerformed(ActionEvent e)
{
System.out.println("sh");
try {
shot = new Robot().createScreenCapture(new
Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
} catch (HeadlessException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (AWTException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
frame.setSize(screenSize);
Image ii = (BufferedImage) shot;
g2d.drawImage(shot, Image.SCALE_AREA_AVERAGING, 0, 0, 0, null);
}
});
ImageIcon image = new ImageIcon("res//images//SnippingTool.png");
label = new JLabel(image);
frame.add(button, BorderLayout.NORTH);
frame.add(label, BorderLayout.SOUTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public static void main(String args[]){
main m = new main();
}
这没什么用
public void actionPerformed(ActionEvent e)
{
System.out.println("sh");
try {
shot = new Robot().createScreenCapture(new
Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
} catch (HeadlessException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (AWTException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
frame.setSize(screenSize);
Image ii = (BufferedImage) shot;
g2d.drawImage(shot, Image.SCALE_AREA_AVERAGING, 0, 0, 0, null);
}
});
ImageIcon image = new ImageIcon("res//images//SnippingTool.png");
label = new JLabel(image);
frame.add(button, BorderLayout.NORTH);
frame.add(label, BorderLayout.SOUTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public static void main(String args[]){
main m = new main();
}
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
}
}
Graphics.drawImage(…)方法只能通过使用绘画方法调用,就像进行自定义绘画的类的paintComponent()方法一样。有关详细信息,请阅读上的Swing教程
public void actionPerformed(ActionEvent e)
{
System.out.println("sh");
try {
shot = new Robot().createScreenCapture(new
Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
} catch (HeadlessException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (AWTException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
frame.setSize(screenSize);
Image ii = (BufferedImage) shot;
g2d.drawImage(shot, Image.SCALE_AREA_AVERAGING, 0, 0, 0, null);
}
});
ImageIcon image = new ImageIcon("res//images//SnippingTool.png");
label = new JLabel(image);
frame.add(button, BorderLayout.NORTH);
frame.add(label, BorderLayout.SOUTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public static void main(String args[]){
main m = new main();
}
最简单的解决方案是使用图像创建一个ImageIcon,然后只需设置添加到帧中的JLabel的图标。然后标签将自动重新绘制
public void actionPerformed(ActionEvent e)
{
System.out.println("sh");
try {
shot = new Robot().createScreenCapture(new
Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
} catch (HeadlessException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (AWTException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
frame.setSize(screenSize);
Image ii = (BufferedImage) shot;
g2d.drawImage(shot, Image.SCALE_AREA_AVERAGING, 0, 0, 0, null);
}
});
ImageIcon image = new ImageIcon("res//images//SnippingTool.png");
label = new JLabel(image);
frame.add(button, BorderLayout.NORTH);
frame.add(label, BorderLayout.SOUTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public static void main(String args[]){
main m = new main();
}
另外,不要使用静态变量。再次使用本教程中的示例来更好地构造程序。Graphics.drawImage(…)方法只能通过使用绘制方法调用,如执行自定义绘制的类的paintComponent()方法。有关详细信息,请阅读上的Swing教程
public void actionPerformed(ActionEvent e)
{
System.out.println("sh");
try {
shot = new Robot().createScreenCapture(new
Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
} catch (HeadlessException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (AWTException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
frame.setSize(screenSize);
Image ii = (BufferedImage) shot;
g2d.drawImage(shot, Image.SCALE_AREA_AVERAGING, 0, 0, 0, null);
}
});
ImageIcon image = new ImageIcon("res//images//SnippingTool.png");
label = new JLabel(image);
frame.add(button, BorderLayout.NORTH);
frame.add(label, BorderLayout.SOUTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public static void main(String args[]){
main m = new main();
}
最简单的解决方案是使用图像创建一个ImageIcon,然后只需设置添加到帧中的JLabel的图标。然后标签将自动重新绘制
public void actionPerformed(ActionEvent e)
{
System.out.println("sh");
try {
shot = new Robot().createScreenCapture(new
Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
} catch (HeadlessException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (AWTException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
frame.setSize(screenSize);
Image ii = (BufferedImage) shot;
g2d.drawImage(shot, Image.SCALE_AREA_AVERAGING, 0, 0, 0, null);
}
});
ImageIcon image = new ImageIcon("res//images//SnippingTool.png");
label = new JLabel(image);
frame.add(button, BorderLayout.NORTH);
frame.add(label, BorderLayout.SOUTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public static void main(String args[]){
main m = new main();
}
另外,不要使用静态变量。再次使用教程中的示例更好地构造程序。如何将BuffereImage更改为ImageIcon?请阅读ImageIcon API。或者阅读关于
如何使用图标的Swing教程。通过从上一个教程链接获取目录,可以找到本教程。如何将BuffereImage更改为ImageIcon?请阅读ImageIcon API。或者阅读关于如何使用图标的Swing教程。您可以通过从上一个教程链接获取目录来找到本教程。您从哪里初始化/获取Graphics2D g2d
对象?@Jeff在顶部我做静态图形2d g2d;程序没有抛出NPE,因此必须使用getGraphics()方法在某个地方初始化它。但是,作为一般规则,您永远不应该使用getGraphics()方法。@DilanHanrahan,您正在将其初始化为null
@DilanHanrahan,而这不是初始化对象。这只是创建了一个空引用。你在哪里初始化/获取你的Graphics2D g2d
对象?@Jeff在顶部我做静态Graphics2D g2d;程序没有抛出NPE,因此必须使用getGraphics()方法在某个地方初始化它。但是,作为一般规则,您永远不应该使用getGraphics()方法。@DilanHanrahan,您正在将其初始化为null
@DilanHanrahan,而这不是初始化对象。这只是创建一个空引用。
public void actionPerformed(ActionEvent e)
{
System.out.println("sh");
try {
shot = new Robot().createScreenCapture(new
Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
} catch (HeadlessException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (AWTException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
frame.setSize(screenSize);
Image ii = (BufferedImage) shot;
g2d.drawImage(shot, Image.SCALE_AREA_AVERAGING, 0, 0, 0, null);
}
});
ImageIcon image = new ImageIcon("res//images//SnippingTool.png");
label = new JLabel(image);
frame.add(button, BorderLayout.NORTH);
frame.add(label, BorderLayout.SOUTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public static void main(String args[]){
main m = new main();
}