使用Java / Swing Jframe单击更改图像

时间:2013-09-27 04:34:01

标签: java jframe jbutton scope imageicon

好的,那里有类似的问题,但我遇到的问题是具体的。

我所拥有的是一个带有3个按钮的简单jFrame。当按下其中一个按钮时,它将计算歌曲的BPM。它还将编辑StringBuilder对象以创建图像的URL路径。输出的这部分很好,这是我的控制台输出。

104.9      //Bpm of Song
One        //String representation of first char in array
Zero       //String representation of Second char in array
Four       //String representation of Third char in array
Nine       //String representation of Fifth char in array
res/1.png  // 
res/0.png  // New Url paths
res/4.png  //
res/9.png  //

我遇到的问题是代码。

JButton tapButton = new JButton("Tap");
    tapButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {

            MathFunctions.tapBPM();
            ArrayComparison.stringCharArrays();

            String urlLocationOne = (ArrayComparison.urlLocationOneBuild.toString());
            String urlLocationTwo = (ArrayComparison.urlLocationTwoBuild.toString());
            String urlLocationThree = (ArrayComparison.urlLocationThreeBuild.toString());
            String urlLocationFive = (ArrayComparison.urlLocationFiveBuild.toString());

        }
    });
    tapButton.setBounds(100, 150, 120, 45);
    contentPane.add(tapButton);

urlLocation [number] Build是一个StringBuilder对象。每次点击它都会检查模板网址,删除数字并替换它(这一点我们知道工作正常)。问题出在图像上。如果我在tapButton ActionEvent中创建一个新图像它没有加载,我必须创建图像,因为它自己的JLabel(在按钮之外)

(这是JLabel的代码(其中有五个我只会向您展示一个))

JLabel locationOne = new JLabel("Image 1");
locationOne.setBackground(Color.WHITE); 
locationOne.setIcon(new ImageIcon(urlLocationOne));   //urlLocationOne not available outside of button
locationOne.setBounds(84, 38, 66, 100);
contentPane.add(locationOne);

所以如果在按钮内部创建了imageIcon它不起作用,如果它是在按钮外创建的,它在“urlLocationOne”的范围之外,如果我创建一个字段,我创建一个只在内部改变的不可变字符串点击按钮,当在tapButton方法外部调用时,它显示原始字符串。放置图像的最佳方法是什么,以便图像响应每次点击时的路径变化。 (记住路径正在改变我只是无法让ImageIcon JLabel'听到'改变。)

1 个答案:

答案 0 :(得分:0)

好的,所以经过两天坚持问题绘制图表和很多压力,似乎答案来自一个良好的夜晚睡眠。这是

final JLabel locationOne = new JLabel("Image 1");
    locationOne.setBackground(Color.WHITE);
    tapButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
    String urlLocationOne = (ArrayComparison.urlLocationOneBuild.toString());
    locationOne.setIcon(new ImageIcon(urlLocationOne));
        }
    });
    locationOne.setBounds(84, 38, 66, 100);
    contentPane.add(locationOne);

而不是尝试使用返回和无意义来访问在另一个方法中创建的字符串,而这些返回和无意义由于某种原因而无法正常工作。我在jLabel中为Image创建了一个新的动作侦听器。这听同一个按钮,但只有一个动作 - 在本地创建字符串。 (事后看来,这看起来很逻辑!!!!!!)