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

ただし、グレースケールサブメニューを押しても画像はグレースケールに変換されませんが、ウィンドウを最小化して最大化すると、画像はグレースケールに変更されます。ウィンドウが更新されていないことが原因だと思います。どうすれば更新できますか?

4

3 に答える 3

4

アクションリスナーでrepaintを呼び出します。ImageComponent

于 2013-03-06T15:49:26.567 に答える
1

アクションリスナーの最後でrepaint()を呼び出してみてください

于 2013-03-06T15:50:13.347 に答える
0

ウィンドウを最小化してから最大化する場合は、.dispose()を試してウィンドウを閉じるか、独自の再起動メソッドを記述して変数を開始値に設定することができます。

于 2013-03-06T15:52:31.713 に答える