好的,那里有类似的问题,但我遇到的问题是具体的。
我所拥有的是一个带有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'听到'改变。)
答案 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创建了一个新的动作侦听器。这听同一个按钮,但只有一个动作 - 在本地创建字符串。 (事后看来,这看起来很逻辑!!!!!!)