2015-08-28 5 views
0

У меня есть программа для отображения статической карты Google после ввода данных, но когда я хочу обновить свою карту, JLabel не изменится. Вот мой код для кнопки один раз очищает карту:Как я могу обновить значок JLabel?

JButton btnMakeMap = new JButton("Make map"); 
     btnMakeMap.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent arg0) { 

       Map map = new Map(txfPlace.getText(), cmbMarkerName.getSelectedItem().toString().charAt(0), cmbMrkColour.getSelectedItem().toString(), Integer.parseInt(cmbZoom.getSelectedItem().toString()), 
         cmbMrkSize.getSelectedItem().toString(), chbCenter.isSelected(), cmbType.getSelectedItem().toString()); 

       if(chbCenter.isSelected()){ 
       map.genMarker(); 
       map.genURlWcenter(); 
       }else{ 
        map.genMarker(); 
        map.genURl(); 
       } 

       lblMap.setIcon(null); 
       map.genimage(); 
       ImageIcon im = new ImageIcon("map.jpg"); 
       lblMap.setIcon(im); 


      } 
     }); 
     btnMakeMap.setBounds(235, 146, 117, 49); 
     pnlSettings.add(btnMakeMap); 

     JButton btnRefresh = new JButton("clear map"); 
     btnRefresh.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent arg0) { 

//    Map map = new Map(txfPlace.getText(), cmbMarkerName.getSelectedItem().toString().charAt(0), cmbMrkColour.getSelectedItem().toString(), Integer.parseInt(cmbZoom.getSelectedItem().toString()), 
//      cmbMrkSize.getSelectedItem().toString(), chbCenter.isSelected(), cmbType.getSelectedItem().toString()); 
       lblMap.setIcon(null); 
//    map.genimage(); 
//    ImageIcon im = new ImageIcon("map.gif"); 
//    lblMap.setIcon(im); 
//    
      } 
     }); 
     btnRefresh.setBounds(406, 172, 89, 23); 
     pnlSettings.add(btnRefresh); 

это код для класса он использует:

package com.mymaps; 

import java.awt.Image; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.util.Scanner; 

import javax.imageio.ImageIO; 
import javax.swing.ImageIcon; 

import org.apache.http.HttpConnection; 
import org.jboss.remoting.transport.Connector; 

public class Map { 

    private String URl = "https://maps.googleapis.com/maps/api/staticmap?"; 
    private int Zoom = 1; 
    private String Location = ""; 
    private String markColor = ""; 
    private String Marker = ""; 
    private char markName; 
    private String markSize = ""; 
    private String mapSize = "&size=400x400"; 
    private boolean wantMarkeratCenter = false; 
    private String mapType = "maptype="; 

    public Map(String location, char name, String colour, int zoom, 
      String mrksize, boolean center, String type) { 
     Location = location; 
     markName = name; 
     markColor = markColor + colour; 
     markSize = mrksize; 
     Zoom = zoom; 
     wantMarkeratCenter = center; 
     mapType = mapType + type; 

     fixLocation(); 

     // if (wantMarkeratCenter){//check if the user wants a marker at the 
     // center 
     // genMarker(); 
     // genURlWcenter(); 
     // }else{ 
     // if(!wantMarkeratCenter){ 
     // genMarker(); 
     // genURl(); 
     // } 
     // } 
    } 

    public boolean validateURl() {// validates URl length 
     boolean isValid = false; 
     if (URl.length() < 0 || URl.length() > 2048) { 
      isValid = true; 
     } else { 
      isValid = false;// y? just because 
     } 
     return isValid; 
    } 

    public void genURl() {// creates the URl for use 

     if (wantsSize()) { 
      URl = URl + mapSize + "&zoom=" + Zoom + "&" + mapType + "&" 
        + Marker; 
     } else { 
      URl = URl + "&" + mapType + Marker; 
     } 
    } 

    public void genURlWcenter() {// generates URl with the center on the 
            // location point 

     String loc = Location.replace('+', ','); 

     if (wantsSize()) { 
      URl = URl + "center=" + loc + mapSize + "&" + mapType + "&" + Marker; 
     } else { 
      URl = URl; 
     } 
    } 

    public void genMarker() {// generates the marker 
     String name = "" + markName; 

     Marker = "markers=color:" + markColor + "|label:" + name.toUpperCase() 
       + "|" + Location; 
    } 

    private boolean wantsSize() {// checks if the user wanted a size or not 
            // based on the var size 
     boolean wantSize = false; 
     if (mapSize.length() != 0) { 
      wantSize = true; 
     } 
     return wantSize; 
    } 

    public String getMarker() { 
     return Marker; 
    } 

    public String getURl() { 
     return URl; 
    } 

    public void genimage() { 

     URL url; 
     try { 
      url = new URL(URl); 
      System.out.println(url); 
      System.out.println(); 

      InputStream is = url.openStream(); 

      OutputStream os = new FileOutputStream("map.jpg"); 

      byte[] b = new byte[2048]; 
      int length; 

      while ((length = is.read(b)) != -1) { 
       os.write(b, 0, length); 
      } 

      is.close(); 
      os.close(); 
     } catch (MalformedURLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

    private void fixLocation() { 

     Scanner sc = new Scanner(Location); 
     String temp = ""; 
     while (sc.hasNext()) { 
      temp = temp + sc.next() + "+"; 
     } 
     temp = temp.substring(0, temp.length() - 1); 
     Location = temp; 
     sc.close(); 

    } 

    public String getLocation() { 
     return Location; 
    } 

    public ImageIcon getImage() { 
     ImageIcon im = new ImageIcon("map..jpg"); 
     return im; 
    } 




} 

это является работоспособной версией кода here

+0

Я не вижу, где эта метка инициализируется или добавляется в ваш компонент. Рассмотрите возможность предоставления [runnable example] (https://stackoverflow.com/help/mcve), который демонстрирует вашу проблему. Это не дамп кода, а пример того, что вы делаете, что подчеркивает проблему, с которой вы сталкиваетесь. Это приведет к меньшему путанице и лучшим ответам – MadProgrammer

ответ

1
  lblMap.setIcon(null); 
      map.genimage(); 
      ImageIcon im = new ImageIcon("map.jpg"); 
      lblMap.setIcon(im); 

Похоже, вы создаете map.jpg и привязываете его к ярлыку, если хотите обновить. с этим кодом, вы все еще видите старое изображение после обновления? Вы подтвердили, что map.jpg является последним? Если да, то может возникнуть проблема с подкачкой ОС, и ОС все еще возвращает старый файл, когда JVM попросил его. Вы можете решить эту проблему, создавая уникальное имя файла каждый раз при обновлении

+0

да, я проверил, что создается новое изображение, и ярлык просто сохраняет свою первоначальную форму (первое сгенерированное изображение) ..... как бы я хотел создать уникальное имя файла ? –

+0

Вы можете прикрепить случайное число вместе с именем файла при создании, чтобы сделать его уникальным. и использовать одно и то же имя во время чтения. – Azhar

Смежные вопросы