2011-12-26 49 views
1

沒有運氣的3小時之後whit String.format()...我轉向你。總之我有填充白衣新條目下面的代碼一個JList:JList中的Java格式化字符串

private void addModule(final JList browse, final JList select){ 
     browse.addMouseListener(new MouseListener(){ 
      @Override 
      public void mouseClicked(MouseEvent e) { 
       String addable = browse.getSelectedValue().toString(); 
       if(e.getClickCount() == 2 && getSelectedTower() != null && addable.charAt(0) == ' '){ 
        String data[] = new EPTModule_Model().moduleData(addable.trim()); 
        String module = data[0]; 
        String module_cap = data[1]; 
        String module_cpu = data[2]; 
        struct.addElement("> " + module + "Capacitor:" + module_cap + "CPU:" + module_cpu); 
        select.setModel(struct); 
        setSelectedModules(1); 
       } else if (e.getClickCount() == 2 && getSelectedTower() == null){ 
        new EPTEvent_Model().eventNoTowerSelected(); 
       } 
      } 
      @Override 
      public void mousePressed(MouseEvent e) {} 
      @Override 
      public void mouseReleased(MouseEvent e) {} 
      @Override 
      public void mouseEntered(MouseEvent e) {} 
      @Override 
      public void mouseExited(MouseEvent e) {} 
     }); 
    } 

總之事情是,當我現在用我的應用程序,因爲我新元素添加到列表中他們並不都是相同的長度,所以我得到輸出是這樣的:

  1. XXXXXXXXXXXXXXXXXXXX電容器:555 CPU:10
  2. XXXXXXXXXX電容器:555 CPU:10
  3. xxxxxxxxxxxxxxxxxxxxxxxxxxx電容器:555 CPU:10

正如你所看到的那樣,我不希望輸出> Capacitor ...在同一列中對齊,而不管xxxxxx字符串的長度。無論如何,如果有幫助,xxxx字符串的最大長度是47個字符。

+2

也許你想要寫一個[自定義渲染(http://docs.oracle.com/javase/tutorial/uiswing/components/list.html#renderer)? – Howard 2011-12-26 15:56:06

+3

或使用等寬字體,或使用表格(因爲它是表格信息)等。 – 2011-12-26 16:05:41

+0

看看MouseAdapter。它可以節省您不得不覆蓋您不想添加代碼的方法。 – MMJZ 2015-03-12 17:32:18

回答

2

試試這個:

struct.addElement(String.format("> %47s Capacitor: %s CPU: %s", module, module_cap, module_cpu)); 
+0

你能看看這個圖像: http://img685.imageshack.us/img685/1036/33338215.jpg 電容字符串應該都對齊在同一列。 – 2011-12-26 16:19:14

+0

啊,我明白了。問題是,如果您希望文本完全對齊,則必須使用固定寬度的字體(例如,Courier New)。不然的話,字母的寬度不一樣,沒有任何東西可以對齊。 – 2011-12-26 16:24:12

+0

奧克所以我把字體設置爲「等寬」似乎工作,但你可以檢查這個圖像: http://img843.imageshack.us/img843/5183/newzmb.jpg 我寧願有>名稱。 .space ..電容器對齊在列表中 Basicaly你可以看到左側圖像中的白色空間,我寧願選擇右側。 – 2011-12-26 16:36:11

1

試試這個:

String part1 = String.format("%47s", "xxxxxxxxxxxxxxxxxxxx"); 
String line1 = part1 + " Capacitor: 555 Cpu: 10"; 

String part2 = String.format("%47s", "xxxxxxxxxx"); 
String line2 = part2 + " Capacitor: 555 Cpu: 10"; 

System.out.println(line1); 
System.out.println(line2); 

不管「XXX」部分的長度,他們總會有長度的47個字符,而且他們將與空格向左填充。所有「Capacitor ...」部件將在同一列中對齊。