我是编程世界的新手,我需要一些帮助。我会尽量保持清醒。
这是我目前的情况:
我正在编写一个简单的游戏。 在Jframe上,我添加了一个附有图像的Jlabel。我还在Jframe上添加了一个Jbutton。
我希望当我点击Jbutton时,图像会出现,然后在下一次单击时隐藏图像。
我怎么能这样做?
提前致谢,请原谅我可能出现的英语错误。
EDIT 按照人们给出的一些指示,我已达到这一点:
button.addActionListener(new Actionbox());
final class Actionbox implements ActionListener
{
public void actionPerformed (ActionEvent e)
{
if (label.getIcon() == null)
label.setIcon(new ImageIcon(myimage));
else
label.setIcon(null);
}
}
Eclipse在代码编辑器的左侧给出了一条错误消息,靠近数字行。它说" Actionbox无法解析为类型"。
我怎么解决?
答案 0 :(得分:3)
不要弄乱按钮的可见性,也不要将其作为最终的局部变量。对于这样的事情,标签应该是一个字段。将它放在您的GUI中并使其可见,因为如果它没有图标或有文本,则不会显示任何内容。而是在按钮的ActionListener中,只需通过其setIcon(...)
方法更改JLabel的ImageIcon。如果要显示图像,请传入图标,如果您不想显示任何内容,请传入null
。使JLabel成为类的一个字段,而不是最终的局部变量。
关于你的代码,创建JButton的ActionListener的一种方法是使用匿名内部类而不是静态私有类。我还建议您可以在类的构造函数中读取图像,而不是每次按下按钮。例如,
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.*;
@SuppressWarnings("serial") // have GUI extend JPanel
public class ButtonSwapImageGui extends JPanel {
private static final String IMAGE_PATH = "https://duke.kenai.com/iconSized/duke.gif";
private Icon imageIcon; // hold our image
private Icon nullImageIcon; // hold a blank image as a placeholder
private JLabel label = new JLabel("", SwingConstants.CENTER);
// throw an exception if image can't be read
public ButtonSwapImageGui() throws IOException {
// read in an image from the internet
URL imageUrl = new URL(IMAGE_PATH);
BufferedImage image = ImageIO.read(imageUrl);
// create a blank placeholder image the same size as
// the image read in from internet
int width = image.getWidth();
int height = image.getHeight();
BufferedImage nullImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
// create ImageIcon objects with images read in above
imageIcon = new ImageIcon(image);
nullImageIcon = new ImageIcon(nullImage);
// set JLabel with the placeholder nullImageIcon
label.setIcon(nullImageIcon);
// create our button
JButton button = new JButton("Swap Image");
// add an anonymous inner class ActionListener to button
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// get the JLabel's Icon
Icon currentIcon = label.getIcon();
// if the Icon matches the null icon
if (currentIcon == nullImageIcon) {
// set label with image
label.setIcon(imageIcon);
} else {
// otherwise the label is displaying the image
// so now set label with the null (blank) icon
label.setIcon(nullImageIcon);
}
}
});
// JPanel to hold our button
JPanel buttonPanel = new JPanel();
buttonPanel.add(button);
// set our GUI's layout to BorderLayout
setLayout(new BorderLayout());
// add the JLabel to the BorderLayout.CENTER position
add(label, BorderLayout.CENTER);
// add button JPanel to the bottom
add(buttonPanel, BorderLayout.PAGE_END);
}
private static void createAndShowGui() {
// declare our GUI JPanel
ButtonSwapImageGui mainPanel = null;
try {
mainPanel = new ButtonSwapImageGui();
} catch (IOException e) {
// if we're here, the image could not be read in
e.printStackTrace();
System.exit(-1); // can't get image -- exit program
}
JFrame frame = new JFrame("GUI");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(mainPanel); // add GUI to JFrame
frame.pack(); // tell layout managers to layout components
frame.setLocationRelativeTo(null); // center GUI
frame.setVisible(true); // display GUI
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
答案 1 :(得分:3)
我希望当我点击Jbutton时,图像会出现,然后在下一次单击时隐藏图像
从标签添加/删除图标:
int *a= (int*) calloc(62500 * 8, sizeof(int))
或者,不是将Icon设置为null,您可能希望有一个空白图标,这样每次显示图像时标签的大小都不会改变。
答案 2 :(得分:0)
您可以这样做:
button.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
jLabel.setVisible(!jLabel.isVisible()); //Note! jLabel has to be a final variable.
}
}
您应该注意,来自ActionListener外部的任何变量都必须是最终变量。这在很大程度上限制了您使用对象