0

我是新手,请耐心等待

我想要的是

我有一个 JPanel,上面有一个 JButton、一个 JLabel 和一个 JTextArea。按下 JButton 后,必须在 JLabel 内打印图像(以及 JTextArea 中的一些文本)。这个特定的图像(和文本)由 if-else 语句确定。if-else 的条件基于整数变量 R。

基本上,它是我正在尝试进行的一项类似于问答的调查。我使用 R 记录用户的答案。当用户单击一个选项时,R 的值会更新。

它适用于文本,但不适用于图像。

对于文本,我使用字符串变量 yourphone。如果最后 R 的值是 120,那么你的手机会更新为一个字符串,例如。Xperia Z。

我想要一个可用于图像的类似变量,以便在用户单击 JButton 时显示 Xperia Z 的图片。

在 if-else 语句中使用 R 的总值。

结构

我像这样启动变量

int R=0;
String yourphone;
ImageIcon imageresult;

我的 JPanel 用于显示结果

final JPanel result = new JPanel();
    result.setBackground(Color.BLACK);
    getContentPane().add(result, "name_17130054294139");
    result.setLayout(null);


    final JTextArea txtrphoneresult = new JTextArea();
    txtrphoneresult.setBackground(Color.BLACK);
    txtrphoneresult.setForeground(Color.YELLOW);
    txtrphoneresult.setFont(new Font("Tahoma", Font.PLAIN, 14));
    txtrphoneresult.setBounds(448, 515, 469, 121);
    result.add(txtrphoneresult);


    JLabel resultlabel = new JLabel(imageresult);
    resultlabel.setBounds(292, 122, 782, 346);
    result.add(resultlabel);




    JButton btnShowResult = new JButton("Show Result");
    btnShowResult.setFont(new Font("Tahoma", Font.PLAIN, 10));
    btnShowResult.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {

            if(R==1726)
            {
                yourphone = "Samsung Galaxy S4\r\nHTC One\r\nSony Xperia Z";
                ImageIcon imageresult = new ImageIcon("galaxy_one_XperiaZ.jpg");
            }
            else if(R==5002)
            {
                yourphone = "Sony Xperia Z1\r\nSamsung Galaxy Note 3";
                ImageIcon imageresult = new ImageIcon("Note3_sonyZ1.jpg");
            }
            else
            {
                yourphone = "No Results";
            }

            txtrphoneresult.setText(yourphone);

     }
     });
    btnShowResult.setBounds(618, 48, 130, 32);
    result.add(btnShowResult);

问题

图像根本不显示。如果有任何其他可能的方法来实现这一点,请指导。

4

5 回答 5

1

你在哪里为你的标签设置图标。你错过了这条线

resultlabel.setIcon(imageresult);
于 2013-11-06T08:13:38.063 回答
1

执行resultLabel最终和更改操作:

public void actionPerformed(ActionEvent e)
            {
                ImageIcon imageresult = null;
                if(R == 1726)
                {
                    yourphone = "Samsung Galaxy S4\r\nHTC One\r\nSony Xperia Z";
                    imageresult = new ImageIcon("galaxy_one_XperiaZ.jpg");
                }
                else if(R == 5002)
                {
                    yourphone = "Sony Xperia Z1\r\nSamsung Galaxy Note 3";
                    imageresult = new ImageIcon("Note3_sonyZ1.jpg");
                }
                else
                {
                    yourphone = "No Results";
                }

                txtrphoneresult.setText(yourphone);
                resultlabel.setIcon(imageresult);

            }
于 2013-11-06T08:14:08.393 回答
1

起初你创建你的imageresult内部if-else,它对所有方法都不可见。而且您不会将图像添加到JLabel.

将 resultlabel 设为 class 成员或final变量。以下列方式更改您的代码:

 public void actionPerformed(ActionEvent e) {

        ImageIcon imageresult = null;
        if(R==1726)
        {
            yourphone = "Samsung Galaxy S4\r\nHTC One\r\nSony Xperia Z";
            imageresult = new ImageIcon("galaxy_one_XperiaZ.jpg");
        }
        else if(R==5002)
        {
            yourphone = "Sony Xperia Z1\r\nSamsung Galaxy Note 3";
            imageresult = new ImageIcon("Note3_sonyZ1.jpg");
        }
        else
        {
            yourphone = "No Results";
        }

        resultlabel.setIcon(imageresult)
        txtrphoneresult.setText(yourphone);

 }
于 2013-11-06T08:14:10.533 回答
1

图像没有显示,因为你没有“给”它给你JLabel。您可以使用setIcon()方法来完成。

您也有变量声明的问题。与 PHP 和其他一些编程语言不同,在 Java 中,变量只存在于声明它的括号(和子括号){}中(尽管有一些例外)。例如 :

public void myMethod() {
    float b = 5f;

    if (true) {
        int a = 6;

        if (true) {
            // a exists, you can do whatever you like with it
            // b exists, you can do whatever you like with it
        }
        // a exists you can do whatever you like with it
        // b exists, you can do whatever you like with it

    } // a is "destroyed"

    // a doesn't exists
    // b still exists
} // b is "destroyed"
// Neither a or b exists

您的变量声明与您的情况完全相同imageresult

于 2013-11-06T08:20:28.817 回答
1

在声明之前声明 ImageIcon imageresultif并调用

resultlabel.setIcon(imageresult)

txtrphoneresult.setText(yourphone);

顺便说一句:不要使用空布局/setBounds()。阅读布局并选择合适的布局。

于 2013-11-06T08:10:44.653 回答