Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JTabel单个单元格文本对齐_Java_Swing_Jtable_Alignment_Tablecellrenderer - Fatal编程技术网

Java JTabel单个单元格文本对齐

Java JTabel单个单元格文本对齐,java,swing,jtable,alignment,tablecellrenderer,Java,Swing,Jtable,Alignment,Tablecellrenderer,基本上,我有一个JTable,这个JTabel将在一个单元格中有一个产品,然后在该单元格中直接低于成本 产品名称应与左侧对齐。 产品成本应与右侧一致 实际上,我并不关心每行中其他单元格的对齐方式 所以我需要设置单个单元格或单个行的对齐方式。我已经找到了设置表对齐方式的方法,以及设置列对齐方式的方法,但从未找到行/单个单元格的方法 sscce: public class Main extends JFrame{ public static void main(String args[]){

基本上,我有一个
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();
    }
}
public类主框架{
公共静态void main(字符串参数[]){
新的Main();
}
公用干管(){
超级(“演示”);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setExtendedState(最大化两个);
setVisible(真);
setLayout(新的BorderLayout());
TableModel dataModel=新的AbstractTableModel(){
对象行[]=新对象[50];
public int getColumnCount(){return 1;}
public int getRowCount(){return rows.length;}
公共对象getValueAt(int行,int列){
返回行[行];
}
公共布尔值可编辑(int行,int列){
返回false;
}
public void setValueAt(对象值、整行、整列){
行[行]=值;
fireTableCellUpdated(第0行);
}
};
JTable receive=新的JTable(数据模型);
receipt.setboorder(BorderFactory.createtchedborder());
收据。setShowGrid(假);
添加(收据、边框布局、中心);
对于(int i=0;i<10;i+=2){
receive.setValueAt(“ProductNameHere”,i,0);
收据。setValueAt(“成本”,i+1,0);
}
验证();
重新油漆();
}
}
for
编号是右对齐的标签。在这种情况下,不需要特殊的渲染器右对齐
INT\u COL
,它被标记为
Index
,并且具有类型
Integer.class

如果这没有帮助,请编辑您的问题,包括显示您当前方法和
成本的数据类型

附录:或者,重写
prepareRender()
,如图所示

SSCCE:

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.awt.BorderLayout;
导入java.awt.Component;
导入java.awt.EventQueue;
导入javax.swing.BorderFactory;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JTable;
导入javax.swing.table.AbstractTableModel;
导入javax.swing.table.TableCellRenderer;
导入javax.swing.table.TableModel;
公共类主框架{
公共静态void main(字符串参数[]){
invokeLater(新的Runnable(){
@凌驾
公开募捐{
新的Main();
}
});
}
公用干管(){
超级(“演示”);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
TableModel dataModel=新的AbstractTableModel(){
对象行[]=新对象[10];
@凌驾
public int getColumnCount(){
返回1;
}
@凌驾
public int getRowCount(){
返回rows.length;
}
@凌驾
公共对象getValueAt(整数行,整数列){
返回行[行];
}
@凌驾
公共布尔值可编辑(int行,int列){
返回false;
}
@凌驾
public void setValueAt(对象值、整行、整列){
行[行]=值;
fireTableCellUpdated(第0行);
}
};
JTable receive=新JTable(数据模型){
@凌驾
公共组件预渲染器(TableCellRenderer渲染器,int行,int列){
JLabel c=(JLabel)super.prepareRenderer(渲染器,行,列);
如果(第%2行==0){
c、 设置水平对齐(JLabel.左);
}否则{
c、 设置水平对齐(JLabel.RIGHT);
}
返回c;
}
};
receipt.setboorder(BorderFactory.createtchedborder());
收据。setShowGrid(假);
添加(收据、边框布局、中心);
对于(int i=0;i<10;i+=2){
receive.setValueAt(“ProductNameHere”,i,0);
receive.setValueAt(整数.valueOf(i+1),i+1,0);
}
包装();
setLocationByPlatform(真);
setVisible(真);
}
}
for
编号是右对齐的标签。在这种情况下,不需要特殊的渲染器右对齐
INT\u COL
,它被标记为
Index
,并且具有类型
Integer.class

如果这没有帮助,请编辑您的问题,包括显示您当前方法和
成本的数据类型

附录:或者,重写
prepareRender()
,如图所示

SSCCE:

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.awt.BorderLayout;
导入java.awt.Component;
导入java.awt.EventQueue;
导入javax.swing.BorderFactory;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JTable;
导入javax.swing.table.AbstractTableModel;
导入javax.swing.table.TableCellRenderer;
导入javax.swing.table.TableModel;
公共类主框架{
公共静态void main(字符串参数[]){
invokeLater(新的Runnable(){
@凌驾
公开募捐{
新的Main();
}
});
}
公用干管(){
超级(“演示”);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
TableModel dataModel=新的AbstractTableModel(){
对象行[]=ne