JButton不会显示

时间:2014-02-28 17:59:38

标签: java swing layout jframe jbutton

我用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();
}
}

2 个答案:

答案 0 :(得分:4)

在添加按钮之前,框架已显示。确保在添加组件后显示此语句。在使框架可见之前调用pack以确保框架足够大以使按钮可见

pack();
setVisible(true);

答案 1 :(得分:3)

您需要重新排列对方法的调用。你应该在框架可见之前调用pack();添加完所有UI组件后 然后,使用setVisible(true)使JFrame可见。