JList中的Java格式化字符串

问题描述:

没有运气的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

试试这个:

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

试试这个:

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 ...”部件将在同一列中对齐。