【发布时间】:2014-01-06 12:51:43
【问题描述】:
编辑:巨大的代码重组,老问题在这里:http://pastebin.com/Mbg4dYiY
我创建了一个基本程序,旨在使用 Swing 在窗口中显示天气。我正在使用 IntelliJ 进行开发,并且在其中使用了 UI 构建器。我正在尝试从 Weather Underground 服务器获取一些信息,然后让一个名为 weatherlabel 的 JLabel 显示此信息。然而,JLabel 实际上并没有在窗口中改变;它只是保持“天气会到这里”。我该如何解决这个问题?
这是我的 main.java:
public class main {
public static void main(String[] args) {
System.out.println("Hello World!");
Display d = new Display();
d.getandsetWeather();
}
}
这是我的 Display.java:
public class Display {
Display disp = this;
public JPanel myPanel;
public JLabel weatherfield;
private JButton button1;
public void init() {
JFrame frame = new JFrame("Display");
frame.setContentPane(new Display().myPanel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setMinimumSize(new Dimension(480, 234));
frame.pack();
frame.setVisible(true);
}
public void getandsetWeather() {
String editedline = null;
init();
try {
// Construct data
String data = URLEncoder.encode("key1", "UTF-8") + "=" + URLEncoder.encode("value1", "UTF-8");
data += "&" + URLEncoder.encode("key2", "UTF-8") + "=" + URLEncoder.encode("value2", "UTF-8");
// Send data
URL url = new URL("http://api.wunderground.com/api/772a9f2cf6a12db3/geolookup/conditions/q/UK/Chester.json");
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(data);
wr.flush();
// Get the response
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while ((line = rd.readLine()) != null) {
if( line.contains("\"weather\":")) {
System.out.println(line);
editedline = line.replace("\"weather\":\"", "");
editedline = editedline.replace("\",", "");
System.out.println(editedline);
weatherfield.setText(editedline);
}
}
wr.close();
rd.close();
weatherfield.setText(editedline);
System.out.println(weatherfield.getText());
weatherfield.repaint();
weatherfield.revalidate();
} catch (Exception e) {
System.out.println("Error!" + e);
}
}
}
当我运行程序时,这会打印到日志中:
Hello World!
"weather":"Scattered Clouds",
Scattered Clouds
Scattered Clouds
【问题讨论】:
-
如需尽快获得更好的帮助,请发帖SSCCE。
-
您可能需要重新验证或重新绘制布局。像这样:d.weatherfield.revalidate();或 d.weatherfield.repaint(); repaint() 应该足够了。
-
@LeoPflug,重绘没有任何区别;不过谢谢。
-
@AndrewThompson,下次会做!