2010-11-24 2 views
1

나는 목록 상자에 리셉션을 생성하는 자바 프로그램을 만들고 있는데, 항목 수, 항목 이름 및 항목 가격을 표시합니다. 그 이름이 중간에 뾰족하고 물품의 수와 비용이 에테르 쪽이되도록 문자열을 덧대어야합니다. 그 문자열의 픽셀 단위로 찾을 수 있습니다 원하는 형식을 달성하는 데 필요한 공간의 수를 계산할 수 있습니다. 감사합니다스윙 JList 글꼴 너비

+0

내 업데이트 된 코드를 참조, 나는 그것이 당신이 정말로 원하는 것을 생각! :) – dacwe

답변

2

당신은 문자열의 폭이 얼마나 이것은 : 다시 내가 왜 JList에서 ListCellRenderer를 사용하지, 문질러서 나는 당신의 질문을 읽을 때,

Graphics2D g2d = (Graphics2D)g; 
FontMetrics fontMetrics = g2d.getFontMetrics(); 

int width = fontMetrics.stringWidth("aString"); 
int height = fontMetrics.getHeight(); 

... 

을하지만?

http://img189.imageshack.us/img189/7509/jlistexample.jpg

을 그리고 여기에 대한 코드입니다 : 그것은 당신이 원하는대로 작동

public static void main(String... args) { 

    JFrame frame = new JFrame("Test"); 

    JList list = new JList(new String[] { 
      "Hello", "World!", "as", "we", "know", "it" }); 

    list.setCellRenderer(new ListCellRenderer() { 

     @Override 
     public Component getListCellRendererComponent(
       JList list, 
       Object value, 
       int index, 
       boolean isSelected, 
       boolean cellHasFocus) { 

      JPanel panel = new JPanel(new GridBagLayout()); 

      if (isSelected) 
       panel.setBackground(Color.LIGHT_GRAY); 

      panel.setBorder(BorderFactory.createMatteBorder(
        index == 0 ? 1 : 0, 1, 1, 1, Color.BLACK)); 

      GridBagConstraints gbc = new GridBagConstraints(); 

      gbc.anchor = GridBagConstraints.EAST; 
      gbc.fill = GridBagConstraints.HORIZONTAL; 
      gbc.insets = new Insets(4,4,4,4); 

      // index 
      gbc.weightx = 0; 
      panel.add(new JLabel("" + index), gbc); 

      // "name" 
      gbc.weightx = 1; 
      panel.add(new JLabel("" + value), gbc); 

      // cost 
      gbc.weightx = 0; 
      String cost = String.format("$%.2f", Math.random() * 100); 
      panel.add(new JLabel(cost), gbc); 


      return panel; 
     } 
    }); 

    frame.add(list); 

    frame.setSize(400, 300); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setVisible(true); 
}