本文介绍了单击按钮将ImageIcon更改为另一张图片的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

限时删除!!

所以我想在每次按下按钮时替换JLabel中的ImageIcon。我做了它,因此图像,标签和GridBagConstraints是公开的。当我尝试改变它时,虽然没有任何反应。

So I want to replace an ImageIcon in a JLabel every time a button is pressed. I made it so the image, label, and GridBagConstraints are public. When I try to change it though nothing happens.

我是以错误的方式进行此操作还是?

Am I going about this the wrong way or?

谢谢!

package hi.low;

import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import javax.swing.*;
import java.util.Random;
import java.util.ArrayList;


public class Card_panel extends JPanel implements ActionListener
{
   private final int WIDTH = 400, HEIGHT = 200;

   private static String[] imageList =  {
          "images/2h.png", "images/3h.png", "images/4h.png", "images/5h.png", "images/6h.png",
          "images/7h.png", "images/8h.png", "images/9h.png", "images/th.png", "images/jh.png",
          "images/qh.png", "images/kh.png", "images/ah.png", "images/2d.png", "images/3d.png",
          "images/4d.png", "images/5d.png", "images/6d.png", "images/7d.png", "images/8d.png",
          "images/9d.png", "images/td.png", "images/jd.png", "images/qd.png", "images/kd.png",
          "images/ad.png", "images/2c.png", "images/3c.png", "images/4c.png", "images/5c.png",
          "images/6c.png", "images/7c.png", "images/8c.png", "images/9c.png", "images/tc.png",
          "images/jc.png", "images/qc.png", "images/kc.png", "images/ac.png", "images/2s.png",
          "images/3s.png", "images/4s.png", "images/5s.png", "images/6s.png", "images/7s.png",
          "images/8s.png", "images/9s.png", "images/ts.png", "images/js.png", "images/qs.png",
          "images/ks.png", "images/as.png"
   };
   private static int imageNum = -1;

   GridBagConstraints gbc = new GridBagConstraints();
   GridBagConstraints c = new GridBagConstraints();
   ImageIcon image;
   JLabel label;
   private static ArrayList<Card> deck;
   private static Card tempCard, currentCard;

   public Card_panel()
   {
        deck = new ArrayList();
        char[] suits = {'h', 'd', 'c', 's'};
        char[] values = {'2', '3', '4', '5', '6', '7', '8', '9', 't', 'j', 'q', 'k', 'a'};
        for(int a = 0; a<suits.length; a++)
        {
            for(int b = 0; b<values.length; b++)
            {
                tempCard = new Card(suits[a],values[b]);
                deck.add(tempCard);
            }
        }
        int rand_num;
        int cards_left = 52;
        Random generator = new Random( System.currentTimeMillis() );
        for(int a = 0; a<52; a++)
        {
            rand_num = generator.nextInt(cards_left);
            currentCard = deck.get(rand_num);
            deck.remove(rand_num);
            cards_left -= 1;
        }
        setPreferredSize(new Dimension(WIDTH, HEIGHT));
        setBackground (Color.green.darker().darker());
        setLayout(new GridBagLayout());

        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.gridwidth = 2;

        image = new ImageIcon(imageList[0]);
        label = new JLabel("", image, JLabel.CENTER);
        add( label, gbc );

        gbc.gridx = 0;
        gbc.gridy++;
        gbc.gridwidth = 1;
        JButton higher = new JButton("Higher");
        higher.setActionCommand("higher");
        higher.addActionListener (this);
        add( higher, gbc );

        gbc.gridx++;
        JButton lower = new JButton("Lower");
        lower.setActionCommand("lower");
        lower.addActionListener (this);
        add( lower, gbc );
   }

    @Override
    public void actionPerformed(ActionEvent e)
    {
        String Action;
        Action = e.getActionCommand ();

        if (Action.equals ("higher"))
        {
            System.out.println("User chose higher!");
            //function to check if it is right if right go to next card
            image = new ImageIcon(imageList[1]);
            label = new JLabel("", image, JLabel.CENTER);
            add( label, gbc );
        }

        if (Action.equals ("lower"))
        {
            System.out.println("User chose lower!");
            //function to check if it is right if right go to next card
        }
    }
}


推荐答案

而不是每次都尝试创建并添加新标签,只需调用 setIcon 在标签上

Rather then trying to create and add a new label each time, simply call setIcon on the label itself

更像是......

image = new ImageIcon(imageList[1]);
label.setIcon(image);

查看获取更多详细信息。

Check out How to use lables for more details.

我可能还建议你加载图片首先,所以你不需要继续重新加载它们/在每个 actionPerformed上创建新对象

I might also suggest that you load the images first, so you don't need to keep reloading them/creating new objects on each actionPerformed

我会还建议 over ImageIcon

这篇关于单击按钮将ImageIcon更改为另一张图片的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

1403页,肝出来的..

09-06 14:10