2010-11-24 4 views
1

Je crée un programme Java avec un récept dans une liste, il affichera le nombre d'articles, le nom de l'article et le prix de l'article. J'ai besoin de tamponner la corde de sorte que le nom soit ruffly au milieu et le nombre d'articles et le coût sont à côté de l'éther. Pouvez-vous trouver le avec en pixels des chaînes, puis je peux calculer le nombre d'espaces nécessaires pour atteindre le format désiré. MerciSwing JList largeur de police

+0

Voir mon code mis à jour, je pense que c'est ce que vous voulez vraiment! :) – dacwe

Répondre

2

Voici comment vous obtenez la largeur d'une chaîne:

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

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

... 

Mais, comme je l'ai lu votre question J'pensais, pourquoi ne pas utiliser le ListCellRenderer dans JList? Il fonctionne comme vous voulez:

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

Et voici le code pour elle:

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); 
} 
Questions connexes