首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JTable :如何在中间对齐数据或如何设置行背景色备用

JTable :如何在中间对齐数据或如何设置行背景色备用
EN

Stack Overflow用户
提问于 2015-06-23 07:57:43
回答 2查看 1.2K关注 0票数 1

如何在JTable中设置行背景色并将数据对齐到center.The JTable1是动态的。JTable使用defaultTableModel来设置数据。我想如果i%==0比背景色是#Color.GRAY color #Color.WHITE,我读过关于呈现类的文章,但是不能理解渲染器类

代码语言:javascript
复制
import java.awt.Dimension;
import java.awt.Font;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

class FacultyList extends JPanel {

    static DefaultTableModel dm;
    JTable table;
    JScrollPane jsp_table;
    static Connection conn;
    static Statement stmt;
    static ResultSet rs;

    public FacultyList(Connection c) {
        conn = c;
        String col_name[] = {"S.No.", "Name", "Father Name", "College ID", 
            "Gender", "Date of Birth", "Branch", "Contact No."};
        dm = new DefaultTableModel(null, col_name);
        table = new JTable(dm);
        table.getTableHeader().setFont(new Font("Goudy Old Style", Font.BOLD, 15));
        table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
        table.getColumnModel().getColumn(0).setPreferredWidth(50);
        table.getColumnModel().getColumn(1).setPreferredWidth(150);
        table.getColumnModel().getColumn(2).setPreferredWidth(150);
        table.getColumnModel().getColumn(3).setPreferredWidth(125);
        table.getColumnModel().getColumn(4).setPreferredWidth(50);
        table.getColumnModel().getColumn(5).setPreferredWidth(125);
        table.getColumnModel().getColumn(6).setPreferredWidth(225);
        table.getColumnModel().getColumn(7).setPreferredWidth(150);
        jsp_table = new JScrollPane(table);
        jsp_table.setPreferredSize(new Dimension(975, 520));
        addRowTable();
        add(jsp_table);
    }

    public static void addRowTable() {
        try {
            int a = dm.getRowCount();
            int i = 0;
            while (i < a) {
                dm.removeRow(0);
                i++;
            }
            String fac = "Faculty";
            stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, 
                    ResultSet.CONCUR_UPDATABLE);
            rs = stmt.executeQuery("SELECT NAME, FNAME, CLG_ID, GANDER, "
                    + "DOB, BRANCH, CONTACT FROM PROFILE "
                    + "where I_AM = '" + fac + "'");
            int count = 1;
            while (rs.next()) {
                String s[] = new String[8];
                s[0] = "" + count;
                s[1] = rs.getString(1);
                s[2] = rs.getString(2);
                s[3] = rs.getString(3);
                s[4] = rs.getString(4);
                s[5] = rs.getString(5);
                s[6] = rs.getString(6);
                s[7] = "" + rs.getLong(7);
                count++;
                if (i % 2 == 0) {
                } else {
                }
                dm.addRow(s);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-23 10:02:06

您可以使用自定义呈现器来完成此操作。可以这样做:

代码语言:javascript
复制
 table1 = new JTable(){

public Component prepareRenderer(TableCellRenderer tcr, int row,
    int column) {
    Component c = super.prepareRenderer(tcr, row, column);

    if (isRowSelected(row)) {

        c.setForeground(getSelectionForeground());
        c.setBackground(getSelectionBackground());

    } else {

        c.setForeground(getForeground());
        c.setBackground((row % 2 == 0) ? getBackground()
            : Color.lightGray);
    }

    int rendererWidth = c.getPreferredSize().width;
    TableColumn tableColumn = getColumnModel().getColumn(column);
    tableColumn.setPreferredWidth(Math.max(rendererWidth
        + getIntercellSpacing().width,
        tableColumn.getPreferredWidth()));

DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer();
rightRenderer.setHorizontalAlignment(SwingConstants.CENTER);
table1.getColumnModel().getColumn(column).setCellRenderer(rightRenderer);
return c;
    }

  };;
票数 1
EN

Stack Overflow用户

发布于 2015-06-23 08:48:50

或者java oracle文档

  • TableCellRenderer只是关于绘画,静力学绘画是基于XxxTableCellRenderer中的设置,不是交互式的,是关于绘画错觉的,
  • XxxTableCellRenderer中绘制是非常整型的,并且是从所有键和鼠标事件调用的,这些事件是用重新关联的APIs实现的方法。
  • 它可以是JTable的单独定义,也可以是返回rulles的单独类,用于绘制JTable视图的定义。
  • JDBC不是设置或定义渲染器的好地方,关于将数据库中的新数据添加到DefaultTableModel
  • ResultSet.CONCUR_UPDATABLE不能设置为JTable,是来自ResultSet的快照,它没有任何返回数据库的操作
  • 为什么JDBC的返回仅限于String s[] = new String[8];,设置为重写getColumnClass正确键入的数据
  • 在Renderer中设置对齐(默认情况下数据类型返回分配),e,g,通过强制转换为JLabel,然后可以在那里使用在JLabels API中实现的所有方法
  • 默认情况下,使用prepareRenderergetTableCellRendererComponent,既适用于整个JTable视图,也使用了许多针对Renderer的尝试,这些尝试仅适用于具体的列。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30997039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档