2013-03-06 33 views
4

我是初学java的人。 我有IMAGEFRAME类,如下所示:如何重置java中的JFrame

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); 
    } 
} 

但是,当我按灰度子图像不能转换成灰度,但是当我在窗口最小化和最大化然后将图像变为灰度。我认为这是由于窗口没有刷新。我如何刷新它?

+0

没有看到'ImageProcessing'类就说不出来。您可能需要为当前的“JFrame”调用repaint()。 – Reimeus 2013-03-06 15:50:18

回答

4

致电repaint在您的动作监听器中的ImageComponent

1

尝试调用重绘()在你的动作监听结束

0

好,因为当最小化窗口,然后将其最大化,你可以尝试.dispose()会关闭窗口,或者你可以写自己的重启方法将变量设置为其初始值。

+1

是的,你可以从柏林到世界各地的柏林:-)换句话说:这不是一个可行的解决方案。 – kleopatra 2013-03-06 15:57:52