如何在Java中重置JFrame

3

我是一个Java的初学者。 我有以下ImageFrame类:

public class ImageFrame extends JFrame {
    private static final long serialVersionUID = 1L;

    public static final int DEFAULT_WIDTH = 1365;
    public static final int DEFAULT_HEIGHT = 730;

    GettingImage getimg = new GettingImage();
    private BufferedImage image = getimg.getImage();

    final ImageProcessing operation = new ImageProcessing(image);

    public ImageFrame(){
        setTitle("ImageTest");
        setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);

        JMenu process = new JMenu("Process");

        JMenuItem greyscale = new JMenuItem("greyscale");
        process.add(greyscale);

        //adding action listener to menu items
        greyscale.addActionListener(
            new ActionListener(){
                public void actionPerformed(ActionEvent e)
                {
                    image = operation.greyscale();
                    System.out.println("greyscale is pressed");  
                }
            }
        );

        JMenuBar bar = new JMenuBar();
        setJMenuBar(bar);
        bar.add(process);

        setSize(1365, 730);
        setVisible(true);

        ImageComponent component = new ImageComponent(image);
        add(component);
    }   
}

当我点击灰度子菜单时,图像并没有转换为灰度,但当我最小化窗口并将其最大化后,图像就变成了灰度。我认为这是因为窗口没有刷新导致的。如何刷新窗口呢?


不看 ImageProcessing 类的情况下很难说。你可能需要为当前的 JFrame 调用 repaint() 方法。 - Reimeus
3个回答

4

在您的动作监听器中对 ImageComponent 调用 repaint


1
在您的动作监听器末尾尝试调用repaint()。

0

好的,既然你想要最小化窗口然后再最大化它,你可以尝试使用.dispose()方法来关闭窗口,或者编写自己的重启方法来将变量设置为它们的初始值。


1
是的,你可以从柏林出发环游世界再回到柏林 :-) 换句话说,那不是一个可行的解决方案。 - kleopatra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接