숫자로 가득 찬 테이블을 중심으로 자바 애플리케이션을 개발 중입니다. 일부 열에서는 셀의 가운데에 소수점이 세로로 정렬되도록 열 (텍스트)을 정렬하고 싶습니다.자바 레이블에서 텍스트 정렬
이런 종류의 상황에 적용되는 정렬 상수가 표시되지 않습니다. 이 상황을 처리 할 Java의 공식 메커니즘이 있습니까?
미리 도움을 청하십시오.
존 Doner는
숫자로 가득 찬 테이블을 중심으로 자바 애플리케이션을 개발 중입니다. 일부 열에서는 셀의 가운데에 소수점이 세로로 정렬되도록 열 (텍스트)을 정렬하고 싶습니다.자바 레이블에서 텍스트 정렬
이런 종류의 상황에 적용되는 정렬 상수가 표시되지 않습니다. 이 상황을 처리 할 Java의 공식 메커니즘이 있습니까?
미리 도움을 청하십시오.
존 Doner는
나는이에 더 프로는 아니지만, 나는 소수점 정렬 할 탭의 속성을 사용자 정의 셀 렌더링으로 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();
}
});
}
}
무엇 각 숫자가 소수점 자리수의 동일한 수를 가지고 바로 열을 정렬하기 위해 사용해 DecimalFormat 객체를 사용하는 방법에 대한.
나는 이것을 시도 할 것이다. 그러나 모든 폰트가 각 문자에 동일한 폭을 할당하는 것은 아니므로 때로는 작동하지 않을 수도있다. 다른 사람. –
JTable 셀 렌더러와 같이 십진 정렬 탭 정지가있는 한 줄 JTextPane을 사용하면이 작업을 수행 할 수 있다고 생각합니다. http://www.java2s.com/Code/Java/Swing-JFC/Createadecimalalignedtabstopat400pixelsfromtheftftmargin.htm –