Java 表格单元格自动右对齐

Java 表格单元格自动右对齐,java,swing,jtable,alignment,Java,Swing,Jtable,Alignment,您好,我遇到了这个问题,我的JTable中的单元格自动右对齐,仅在事件后的第一列中。我使用的是我其他班级的TableModel以及table。如果你想看的话,我可以给你看我另一个类的代码 我已尝试设置与此代码的对齐方式: DefaultTableCellRenderer leftRenderer = new DefaultTableCellRenderer(); leftRenderer.setHorizontalAlignment(JLabel.LEFT); table.getColumnMo

您好,我遇到了这个问题,我的JTable中的单元格自动右对齐,仅在事件后的第一列中。我使用的是我其他班级的TableModel以及table。如果你想看的话,我可以给你看我另一个类的代码

我已尝试设置与此代码的对齐方式:

DefaultTableCellRenderer leftRenderer = new DefaultTableCellRenderer();
leftRenderer.setHorizontalAlignment(JLabel.LEFT);
table.getColumnModel().getColumn(1).setCellRenderer(leftRenderer);
这也没有解决问题

package gui;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableCellRenderer;

import mappers.MemberMapper;
import domains.Member;

public class EditMemberGUI {
    private JFrame editMemberFrame;
    private JPanel btnsPanel, panel;
    private JButton editBtn, cancelBtn;
    private JLabel fNameLbl, lNameLbl, addressLbl, zipCodeLbl, cityLbl, emailLbl,
                    phoneNoLbl;
    private JTextField fNameTF, lNameTF, addressTF, zipCodeTF, cityTF, emailTF,
    phoneNoTF; ;
    private GridLayout layout;

    public EditMemberGUI(final ShowMembersGUI gui) {

        layout = new GridLayout(0,2,1,0);

        panel = new JPanel();
        panel.setLayout(layout);
        layout.setVgap(0);

        fNameLbl = new JLabel("Fornavn: ");
        fNameTF = new JTextField(15);

        lNameLbl = new JLabel("Efternavn: ");
        lNameTF = new JTextField(15);

        addressLbl = new JLabel("Adresse: ");
        addressTF = new JTextField(15);


        zipCodeLbl = new JLabel("Postnummer: ");
        zipCodeTF = new JTextField(15);

        cityLbl = new JLabel("By: ");
        cityTF = new JTextField(15);

        emailLbl = new JLabel("Email: ");
        emailTF = new JTextField(15);

        phoneNoLbl = new JLabel("Telefonnr: ");
        phoneNoTF = new JTextField(15);

        panel.add(fNameLbl);
        panel.add(fNameTF);
        panel.add(lNameLbl);
        panel.add(lNameTF);
        panel.add(addressLbl);
        panel.add(addressTF);
        panel.add(zipCodeLbl);
        panel.add(zipCodeTF);
        panel.add(cityLbl);
        panel.add(cityTF);
        panel.add(emailLbl);
        panel.add(emailTF);
        panel.add(phoneNoLbl);
        panel.add(phoneNoTF);


        //------------

        btnsPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));

        editBtn = new JButton("Redigér");
        editBtn.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e) {                
                int zipCode = Integer.parseInt(zipCodeTF.getText());
                Member m = new Member(fNameTF.getText(), lNameTF.getText(), 
                        addressTF.getText(), zipCode, cityTF.getText(),
                        emailTF.getText(), phoneNoTF.getText());
                MemberMapper mMapper = new MemberMapper();
                int i = gui.getIndex();
                mMapper.editMember(m, i);

                editMemberFrame.setVisible(false);


                List<Member> data = mMapper.selectAllMembers();
                MyTableModel myTableModel = new MyTableModel(data);

                gui.getTable().setModel(myTableModel);
                int row = gui.getTable().getSelectedRow();
                myTableModel.tableUpdate(row, m);

            }   
        });

        cancelBtn = new JButton("Cancel");
        cancelBtn.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent arg0) {
                editMemberFrame.setVisible(false);
            }   
        });

        btnsPanel.add(editBtn);
        btnsPanel.add(cancelBtn);

    }

    public void showGUI() {

        editMemberFrame = new JFrame();
        editMemberFrame.setTitle("Redigér Medlem");
        editMemberFrame.setLayout(new BorderLayout());
        editMemberFrame.setSize(400,300);

        editMemberFrame.add(panel, BorderLayout.CENTER);
        editMemberFrame.add(btnsPanel, BorderLayout.SOUTH);
        //editMemberFrame.pack();
        editMemberFrame.setVisible(true);
    }

    public JTextField getfNameTF() {
        return fNameTF;
    }

    public void setfNameTF(JTextField fNameTF) {
        this.fNameTF = fNameTF;
    }

    public JTextField getlNameTF() {
        return lNameTF;
    }

    public void setlNameTF(JTextField lNameTF) {
        this.lNameTF = lNameTF;
    }

    public JTextField getAddressTF() {
        return addressTF;
    }

    public void setAddressTF(JTextField addressTF) {
        this.addressTF = addressTF;
    }

    public JTextField getZipCodeTF() {
        return zipCodeTF;
    }

    public void setZipCodeTF(JTextField zipCodeTF) {
        this.zipCodeTF = zipCodeTF;
    }

    public JTextField getCityTF() {
        return cityTF;
    }

    public void setCityTF(JTextField cityTF) {
        this.cityTF = cityTF;
    }

    public JTextField getEmailTF() {
        return emailTF;
    }

    public void setEmailTF(JTextField emailTF) {
        this.emailTF = emailTF;
    }

    public JTextField getPhoneNoTF() {
        return phoneNoTF;
    }

    public void setPhoneNoTF(JTextField phoneNoTF) {
        this.phoneNoTF = phoneNoTF;
    }
    }
packagegui;
导入java.awt.BorderLayout;
导入java.awt.FlowLayout;
导入java.awt.GridLayout;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.util.List;
导入javax.swing.JButton;
导入javax.swing.JComboBox;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JOptionPane;
导入javax.swing.JPanel;
导入javax.swing.JTextField;
导入javax.swing.SwingConstants;
导入javax.swing.SwingUtilities;
导入javax.swing.table.DefaultTableCellRenderer;
导入mappers.MemberMapper;
导入域。成员;
公共类EditMemberGUI{
私有JFrame-editMemberFrame;
私人JPanel btnsPanel,专家组;
私有JButton editBtn、cancelBtn;
私人JLabel fNameLbl、lNameLbl、addressLbl、zipCodeLbl、CITYBL、emailLbl、,
phoneNoLbl;
私有JTextField fNameTF、lNameTF、addressTF、zipCodeTF、cityTF、emailTF、,
电话号码;
私人网格布局;
公共编辑成员gui(最终显示成员gui){
布局=新的网格布局(0,2,1,0);
panel=新的JPanel();
面板设置布局(布局);
布局。设置间隙(0);
fNameLbl=新的JLabel(“Fornavn:”);
fNameTF=新的JTextField(15);
lNameLbl=新的JLabel(“Efternavn:”);
lNameTF=新的JTextField(15);
addressLbl=新的JLabel(“地址:”);
addressTF=新的JTextField(15);
zipCodeLbl=新的JLabel(“postnumer:”);
zipCodeTF=新的JTextField(15);
cityLbl=新的JLabel(“By:”);
cityTF=新的JTextField(15);
emailLbl=新的JLabel(“电子邮件:”);
emailTF=新的JTextField(15);
phoneNoLbl=新的JLabel(“telefonr:”);
phoneNoTF=新的JTextField(15);
面板。添加(fNameLbl);
增补小组(fNameTF);
面板。添加(lNameLbl);
小组.增补(lNameTF);
面板。添加(地址LBL);
增补(地址TF);
面板。添加(zipCodeLbl);
添加面板(zipCodeTF);
增补(城市基本法);
增补(城市信托基金);
panel.add(emailLbl);
添加(emailTF);
面板。添加(phoneNoLbl);
面板。添加(phoneNoTF);
//------------
btnsPanel=newjpanel(newflowlayout(FlowLayout.RIGHT));
editBtn=新按钮(“Redigér”);
editBtn.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
int zipCode=Integer.parseInt(zipCodeTF.getText());
Member m=新成员(fNameTF.getText(),lNameTF.getText(),
addressTF.getText(),zipCode,cityTF.getText(),
emailTF.getText(),phoneNoTF.getText());
MemberMapper mMapper=新的MemberMapper();
inti=gui.getIndex();
议员(m,i);
editMemberFrame.setVisible(false);
List data=mMapper.selectAllMembers();
MyTableModel MyTableModel=新的MyTableModel(数据);
gui.getTable().setModel(myTableModel);
int row=gui.getTable().getSelectedRow();
myTableModel.tableUpdate(行,m);
}   
});
cancelBtn=新按钮(“取消”);
cancelBtn.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件arg0){
editMemberFrame.setVisible(false);
}   
});
btnsPanel.add(editBtn);
btnsPanel.add(取消btn);
}
公共void showGUI(){
editMemberFrame=新JFrame();
editMemberFrame.setTitle(“Redigér Medlem”);
editMemberFrame.setLayout(新的BorderLayout());
editMemberFrame.setSize(400300);
editMemberFrame.add(面板、边框布局、中心);
editMemberFrame.add(btnsPanel,BorderLayout.SOUTH);
//editMemberFrame.pack();
editMemberFrame.setVisible(true);
}
公共JTextField getfNameTF(){
返回fNameTF;
}
公共void setfNameTF(JTextField fNameTF){
this.fNameTF=fNameTF;
}
公共JTextField getlNameTF(){
返回lNameTF;
}
公共void setlNameTF(JTextField lNameTF){
this.lNameTF=lNameTF;
}
公共JTextField getAddressTF(){
返回地址tf;
}
公共无效setAddressTF(JTextField addressTF){
this.addressTF=addressTF;
}
公共JTextField getZipCodeTF(){
返回zipCodeTF;
}
公共void setZipCodeTF(JTextField zipCodeTF){
this.zipCodeTF=zipCodeTF;
}
公共JTextField getCityTF(){
返回城市TF;
}
公共void setCityTF(JTextField cityTF){
this.cityTF=cityTF;
}
公共JTextField getEmailTF(){
返回emailTF;
}
public void setEmailTF(JTextField emailTF){
this.emailTF=emailTF;
}
公共JTextField getPhoneNoTF(){
返回phoneNoTF;
}
公共void setPhoneNoTF(JTextField phoneNoTF){
this.phoneNoTF=phoneNoTF;
}
}

为此,您需要自己的
TableCellRenderer
,或者您可以覆盖
DefaultTableCellRenderer
GetTableCellRenderComponent()
方法,例如:

private TableCellRenderer getCellRenderer() {
    return new DefaultTableCellRenderer(){
        @Override
        public Component getTableCellRendererComponent(JTable arg0, Object arg1, boolean arg2, boolean arg3, int arg4, int arg5) {
             //logic for Alignment
             setHorizontalAlignment(left ? JLabel.LEFT : JLabel.RIGHT);
             return super.getTableCellRendererComponent(arg0, arg1, arg2, arg3, arg4, arg5);
        }
    };
}
此处
left
是一个布尔变量,用作对齐标志

编辑: 在这里尝试一下,就像你发布的:

table.getColumnModel().getColumn(1).setCellRenderer(getCellRenderer());
getCellRenderer()
为您的列返回渲染器,您不需要自己调用它的方法

编辑: 这里有一个例子

public class Form extends JFrame {

    private Boolean left = true;

    public Form(){

        final JTable t = new JTable(new DefaultTableModel(new Object[][]{{1,2,3},{4,5,6}},new Object[]{"a","b","c"}));
        t.getColumnModel().getColumn(0).setCellRenderer(getCellRenderer());
        getContentPane().add(new JScrollPane(t));
        JButton change = new JButton("change");
        change.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                left = !left;
                t.repaint();
            }
        });
        getContentPane().add(change,BorderLayout.SOUTH);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }

    private TableCellRenderer getCellRenderer() {
        return new DefaultTableCellRenderer(){
            @Override
            public Component getTableCellRendererComponent(JTable arg0, Object arg1, boolean arg2, boolean arg3, int arg4, int arg5) {
                 setHorizontalAlignment(left ?JLabel.LEFT :  JLabel.RIGHT);
                 return super.getTableCellRendererComponent(arg0, arg1, arg2, arg3, arg4, arg5);
            }
        };
    }

    public static void main(String[] args) {
        new Form();
    }
}

您不会显示为t构建实际数据的代码