我正在尝试编写一个具有默认图像(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();
}
}
}
}
答案 0 :(得分:3)
请勿更换所有组件,只需更换图标。
label.setIcon( icon );
不需要revalidate()或repaint(),标签会自动重绘。
答案 1 :(得分:1)
您需要实际添加 ActionListener
到您的按钮:
red.addActionListener(this);
和
blue.addActionListener(this);