2010-12-19 13 views
1

数字でいっぱいのテーブルを中心にJavaアプリケーションを開発しています。いくつかの列では、小数点がセルの中央に垂直に整列するように、列内の数値(テキスト)を整列させたいと思います。Javaラベル内のテキストの整列

このような状況に当てはまる整列定数は表示されません。 Javaには、このような状況を処理するための公式のメカニズムはありますか?

ご協力いただきありがとうございます。

ジョンDoner

+0

これは、JTableセルレンダラとして小数点揃えのタブストップを持つ1行のJTextPaneを使用することで実現できると思います。 http://www.java2s.com/Code/Java/Swing-JFC/Createadecimalalignedtabstopat400pixelsfromtheftftmargin.htm –

答えて

0

私はこれで何のプロだんが、私はカスタムセルレンダラーとしてJTextPaneのを使用して、小数点揃えするタブの属性を設定することにより、上記のように、それは作業を行います。これを行う場合は、データがStringとして表され、タブ文字がデータ文字列の先頭に追加されるようにデータを編集するときは注意が必要です。

import java.awt.BorderLayout; 
import java.awt.Component; 

import javax.swing.*; 
import javax.swing.table.*; 
import javax.swing.text.*; 

@SuppressWarnings("serial") 
public class TabStopDecimalAlign extends JPanel { 
    private static final String[][] DATA = {{"One", "1.234"}, {"Two", "232.3223"}, 
    {"Three", "0.2323"}, {"Four", "12.345"}, {"Five", "10000.0"}}; 
    private static final String[] COLUMNS = {"Count", "Data"}; 
    private static final int ROW_HEIGHT = 24; 
    private DecimalAlignRenderer decimalAlignRenderer = new DecimalAlignRenderer(); 
    private DefaultTableModel model = new DefaultTableModel(DATA, COLUMNS); 
    private JTable table = new JTable(model) { 
     @Override 
     public TableCellRenderer getCellRenderer(int row, int column) { 
      if (column == 1) { 
       return decimalAlignRenderer; 
      } 
      return super.getCellRenderer(row, column); 
     } 
    }; 

    public TabStopDecimalAlign() { 
     setLayout(new BorderLayout()); 
     add(new JScrollPane(table), BorderLayout.CENTER); 
     table.setRowHeight(ROW_HEIGHT); 
    } 

    private static class DecimalAlignRenderer implements TableCellRenderer { 
     private static final float POS = 40f; 
     private static final int ALIGN = TabStop.ALIGN_DECIMAL; 
     private static final int LEADER = TabStop.LEAD_NONE; 
     private static final SimpleAttributeSet ATTRIBS = new SimpleAttributeSet(); 
     private static final TabStop TAB_STOP = new TabStop(POS, ALIGN, LEADER); 
     private static final TabSet TAB_SET = new TabSet(new TabStop[] { TAB_STOP }); 

     private StyledDocument document = new DefaultStyledDocument(); 
     private JTextPane pane = new JTextPane(document); 

     public DecimalAlignRenderer() { 
      StyleConstants.setTabSet(ATTRIBS, TAB_SET); 
      pane.setParagraphAttributes(ATTRIBS, false); 
     } 

     public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, 
        boolean hasFocus, int row, int column) { 
      if (value == null) { 
       pane.setText("\t0.0"); 
      } else { 
       pane.setText("\t" + value.toString()); 
      } 
      return pane; 
     } 


    } 



    private static void createAndShowUI() { 
     JFrame frame = new JFrame("TabStopDecimalAlign"); 
     frame.getContentPane().add(new TabStopDecimalAlign()); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       createAndShowUI(); 
      } 
     }); 
    } 
} 
0

各番号を作るためのDecimalFormatオブジェクトを使用する方法について何が小数点以下の桁の同じカウントを持っているし、ちょうど右の列を揃えます。

+0

これを試してみますが、すべてのフォントが各文字に等しい幅を割り当てているわけではないことがわかりました。その他。 –

関連する問題