gpt4 book ai didi

java - JTabel 单个单元格文本对齐

转载 作者:行者123 更新时间:2023-11-29 03:36:54 25 4
gpt4 key购买 nike

基本上我有一个 JTable,这个 JTabel 将在一个单元格中有一个产品,然后在它正下方的单元格中有成本。

产品名称应左对齐。产品成本应右对齐。

我实际上并不关心每行中其他单元格的对齐方式。

所以我需要设置单个单元格或单个行的对齐方式。我找到了设置表格对齐方式的方法,以及设置列对齐方式的方法,但从来没有找到行/单个单元格的对齐方式。

sscce:

public class Main extends JFrame{
public static void main(String args[]){
new Main();
}
public Main(){
super("Demo");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setExtendedState(MAXIMIZED_BOTH);
setVisible(true);
setLayout(new BorderLayout());
TableModel dataModel = new AbstractTableModel() {
Object rows[] = new Object[50];
public int getColumnCount(){return 1;}
public int getRowCount(){return rows.length;}
public Object getValueAt(int row, int col){
return rows[row];
}
public boolean isCellEditable(int row, int col){
return false;
}
public void setValueAt(Object value, int row, int col) {
rows[row] = value;
fireTableCellUpdated(row,0);
}
};

JTable receipt = new JTable(dataModel);
receipt.setBorder(BorderFactory.createEtchedBorder());
receipt.setShowGrid(false);
add(receipt,BorderLayout.CENTER);
for(int i = 0; i < 10; i+=2){
receipt.setValueAt("ProductNameHere",i,0);
receipt.setValueAt("Cost",i+1,0);
}
validate();
repaint();
}
}

最佳答案

default renderer Number 是右对齐标签。在这个example ,不需要特殊的渲染器来右对齐标记为 Index 且类型为 Integer.classINT_COL

image

如果这没有帮助,请编辑您的问题以包含 sscce显示您当前的方法和您的 cost 数据类型。

附录:或者,覆盖prepareRender(),如图here .

image

JTable receipt = new JTable(dataModel) {
@Override
public Component prepareRenderer(TableCellRenderer renderer, int row, int col) {
JLabel c = (JLabel) super.prepareRenderer(renderer, row, col);
if (row % 2 == 0) {
c.setHorizontalAlignment(JLabel.LEFT);
} else {
c.setHorizontalAlignment(JLabel.RIGHT);

}
return c;
}
};

中南合作:

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.EventQueue;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableModel;

public class Main extends JFrame {

public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new Main();
}
});
}

public Main() {
super("Demo");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
TableModel dataModel = new AbstractTableModel() {
Object rows[] = new Object[10];

@Override
public int getColumnCount() {
return 1;
}

@Override
public int getRowCount() {
return rows.length;
}

@Override
public Object getValueAt(int row, int col) {
return rows[row];
}

@Override
public boolean isCellEditable(int row, int col) {
return false;
}

@Override
public void setValueAt(Object value, int row, int col) {
rows[row] = value;
fireTableCellUpdated(row, 0);
}
};

JTable receipt = new JTable(dataModel) {
@Override
public Component prepareRenderer(TableCellRenderer renderer, int row, int col) {
JLabel c = (JLabel) super.prepareRenderer(renderer, row, col);
if (row % 2 == 0) {
c.setHorizontalAlignment(JLabel.LEFT);
} else {
c.setHorizontalAlignment(JLabel.RIGHT);

}
return c;
}
};
receipt.setBorder(BorderFactory.createEtchedBorder());
receipt.setShowGrid(false);
add(receipt, BorderLayout.CENTER);
for (int i = 0; i < 10; i += 2) {
receipt.setValueAt("ProductNameHere", i, 0);
receipt.setValueAt(Integer.valueOf(i + 1), i + 1, 0);
}
pack();
setLocationByPlatform(true);
setVisible(true);
}
}

关于java - JTabel 单个单元格文本对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15016139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com