2016-01-07 3 views
1

Я пытаюсь использовать пользовательский значок в моем приложении vaadin. Я следую рекомендациям, приведенным на странице this.Как создать шрифт для пользовательского шрифта значка в vaadin

У меня возникают проблемы с созданием перечня java для шрифта.

На этой странице говорится,

(Обратите внимание, что вы можете легко сгенерировать перечисление из списка иконок в почтового индекса, загруженный из IcoMoon.)

Но я понятия не имею, как я могу сгенерировать это перечисление с загруженным jip-файлом icomoon. Может быть, мне не хватает некоторых базовых знаний, которые страница взяла на себя читателем.

Может ли кто-нибудь сказать мне, как создать переименование значка?

+0

вы проверили раздел «3. Использование Make значков в Java» в ссылке, которую вы публикуемую в вопросе ?, он предоставляет пример – saljuama

+0

@saljuama да это пример. Но писать код вручную для большого набора значков не представляется возможным (страница говорит, что он может быть сгенерирован, но не говорит, как). Кроме того, на странице не упоминается, откуда она получила значение перечисления. например: 'RIBBON (0xe009)' –

+0

значение, которое вы можете получить из файла style.css внутри загруженного zip, в конце вы получите все шестнадцатеричные коды. Wether практичен или нет, гид говорит, что это необходимо, я боюсь. – saljuama

ответ

3

я столкнулся с той же проблемой и написал класс для этого, который автоматически преобразует selection.js из архива IcoMoon к полной и полной Vaadin-совместимой Java-перечислимый ;-)

Вы можете повторно использовать. Для этого требуется только JSon простые баночку из https://code.google.com/archive/p/json-simple/downloads

import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.Iterator; 

import org.json.simple.JSONArray; 
import org.json.simple.JSONObject; 
import org.json.simple.parser.JSONParser; 
import org.json.simple.parser.ParseException; 

public class JSONTools { 

    public static void convertIcoMoonJSON2EnumClass(String filename) { 

     JSONParser parser = new JSONParser(); 

     StringBuilder returnTxt = new StringBuilder(); 

     returnTxt.append("public enum IcoMoon implements FontIcon {\n\n"); 

     try { 

      Object obj = parser.parse(new FileReader(filename)); 

      JSONObject jsonObject = (JSONObject) obj; 
      // loop array 
      JSONArray msg = (JSONArray) jsonObject.get("icons"); 
      Iterator<JSONObject> iterator = msg.iterator(); 
      int i = 0; 
      while (iterator.hasNext()) { 
       JSONObject iterator_current = iterator.next(); 

       JSONObject icon = (JSONObject) iterator_current.get("icon"); 
       // System.out.println(icon); 

       JSONArray tags = (JSONArray) icon.get("tags"); 
       returnTxt.append(((String) tags.get(0)).toUpperCase().replace("-", "_")); 

       returnTxt.append("("); 

       JSONObject properties = (JSONObject) iterator_current.get("properties"); 
       long code = (Long) properties.get("code"); 
       returnTxt.append(code); 
       returnTxt.append(")"); 

       returnTxt.append(",\n"); 

       // System.out.println(icon); 
      } 
      returnTxt.append(";\n"); 

     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 

     returnTxt.append("\r\n" + 
       " private final int codepoint;\r\n" + 
       " // This must match (S)CSS\r\n" + 
       " private final String fontFamily = \"IcoMoon\";\r\n" + 
       "\r\n" + 
       " IcoMoon(int codepoint) {\r\n" + 
       "  this.codepoint = codepoint;\r\n" + 
       " }\r\n" + 
       "\r\n" + 
       " @Override\r\n" + 
       " public String getFontFamily() {\r\n" + 
       "  return fontFamily;\r\n" + 
       " }\r\n" + 
       "\r\n" + 
       " @Override\r\n" + 
       " public int getCodepoint() {\r\n" + 
       "  return codepoint;\r\n" + 
       " }\r\n" + 
       "\r\n" + 
       " @Override\r\n" + 
       " public String getHtml() {\r\n" + 
       "  return \"<span class=\\\"v-icon IcoMoon\\\">&#x\" + Integer.toHexString(codepoint) + \";</span>\";\r\n" + 
       " }\r\n" + 
       "\r\n" + 
       " @Override\r\n" + 
       " public String getMIMEType() {\r\n" + 
       "  // Font icons are not real resources\r\n" + 
       "  throw new UnsupportedOperationException(\r\n" + 
       "    FontIcon.class.getSimpleName() + \" should not be used where a MIME type is needed.\");\r\n" + 
       " }\r\n" + 
       "\r\n" + 
       "}"); 

     System.out.println(returnTxt); 

    } 

    public static void main(String[] args) { 
     convertIcoMoonJSON2EnumClass("path_to_your_selection.json"); 
    } 

} 
+0

Спасибо, что поделились своим решением. Я сделал это с помощью макроса notepad ++. Я буду использовать ваше решение, когда добавлю еще несколько значков в свой шрифт. –

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