刷新java中的面板

时间:2013-11-26 18:52:50

标签: java swing applet

我正在尝试编写一个具有默认图像(white.jpeg)的applet。 Applet有两个JButton,可以在点击相应的按钮时加载蓝色图像(blue.jpeg)或红色图像(red.jpeg)。点击任一按钮时都不会加载任何图像。

我希望添加任何建议或代码以使applet可用。

import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class panel extends JApplet implements ActionListener
{
    private JButton red;
    private JButton blue;
    private JPanel panel,inner;
    private Image img;
    private ImageIcon icon;
    private JLabel label;

    public void init()
    {
        panel=new JPanel();
        inner=new JPanel();
        red=new JButton("Red");
        blue=new JButton("Blue");
            red.addActionListener(this);
            blue.addActionListener(this);
        inner.add(blue);
        inner.add(red);

        try
        {
                img=ImageIO.read(this.getClass().getResource("white.jpeg"));
                img=img.getScaledInstance(300,300, Image.SCALE_DEFAULT);
                icon=new ImageIcon(img);
                label=new JLabel(icon);
                add(label,java.awt.BorderLayout.CENTER);
                add(inner,java.awt.BorderLayout.SOUTH);


        }
        catch(IOException e)
        {
            e.printStackTrace();
        }

    }


    public void actionPerformed(ActionEvent e)
    {
        if(e.getSource()==red)
        {
            try
            {
                    removeAll();
                    img=ImageIO.read(this.getClass().getResource("red.jpeg"));
                    img=img.getScaledInstance(300,300, Image.SCALE_DEFAULT);
                    icon=new ImageIcon(img);
                    label=new JLabel(icon);
                    add(label,java.awt.BorderLayout.CENTER);
                    add(inner,java.awt.BorderLayout.SOUTH);
                    validate();
                    repaint();

            }
            catch(IOException ex)
            {
                ex.printStackTrace();
            }

        }
        if(e.getSource()==blue)
        {
            try
            {       removeAll();
                    img=ImageIO.read(this.getClass().getResource("blue.jpeg"));
                    img=img.getScaledInstance(300,300, Image.SCALE_DEFAULT);
                    icon=new ImageIcon(img);
                    label=new JLabel(icon);
                    add(label,java.awt.BorderLayout.CENTER);
                    add(inner,java.awt.BorderLayout.SOUTH);
                    validate();
                    repaint();

            }
            catch(IOException ex)
            {
                ex.printStackTrace();
            }

        }

    }
}

2 个答案:

答案 0 :(得分:3)

请勿更换所有组件,只需更换图标。

label.setIcon( icon );

不需要revalidate()或repaint(),标签会自动重绘。

答案 1 :(得分:1)

您需要实际添加 ActionListener到您的按钮:

red.addActionListener(this);

blue.addActionListener(this);