简体   繁体   English

JTable:如何在中心对齐数据或如何设置行背景色交替

[英]JTable : how to align data in the center or how to set row background color alternate

How can I set the row background color in JTable and also align the data to the center.The JTable1 is dynamic. 我如何在JTable设置行背景色以及如何使数据与中心对齐JTable1是动态的。 JTable uses defaultTableModel for setting the data. JTable使用defaultTableModel设置数据。 I want to if i%==0 than background color is #Color.GRAY else #Color.WHITE I read about render class but can not understand about renderer class 我想如果i%==0不是背景色是#Color.GRAY否则#Color.WHITE我阅读了有关渲染类的信息,但不了解渲染器类的信息

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();
        }
    }
}

on this site or java oracle doc 在此站点上或Java oracle doc上

  • TableCellRenderer is just about painting, is statics painting based on settings in XxxTableCellRenderer, isn't interactive, is about painting illusion, TableCellRenderer只是绘画,是基于XxxTableCellRenderer中设置的静态绘画,不是交互式的,是关于幻觉的绘画,

  • painting in XxxTableCellRenderer is quite intesive and is invoked from all key and mouse events, methods implemented in rellated APIs XxxTableCellRenderer绘画非常XxxTableCellRenderer ,可以从所有按键和鼠标事件(在相关API中实现的方法)中调用

  • it could be separate definition for JTable or separate class thats returns rulles, painting definitions for JTable s view 它可以是JTable单独定义,也可以是返回rulle的单独的类,为JTable的视图绘制定义

  • JDBC isn't good place to set or define the Renderer, about add a new data from database to DefaultTableModel , 在将数据库中的新数据添加到DefaultTableModel方面JDBC不是设置或定义Renderer的好地方。

  • ResultSet.CONCUR_UPDATABLE could not be set for JTable , is snapshot from ResultSet, it hasn't any action back to database ResultSet.CONCUR_UPDATABLE不能用于设置JTable ,从结果集的快照,它没有任何动作回数据库

  • why is returns from JDBC restricted to String s[] = new String[8]; 为什么从JDBC返回的值仅限于String s[] = new String[8]; , set data typed correctly by override getColumnClass ,设置通过重写getColumnClass正确键入的数据

  • set alignment in Renderer (data typed returns alingment by default), e,g, by cast to JLabel, then all methods implemented in JLabels API can be used there 在Renderer中设置对齐方式(默认情况下,数据类型返回alingment),例如通过强制转换为JLabel,然后可以在其中使用JLabels API中实现的所有方法

  • by default there are used prepareRenderer , getTableCellRendererComponent , both for whole JTable s view and many various attempts for Renderer applied just for the concrete Columns 默认情况下,整个JTable的视图都使用了prepareRenderergetTableCellRendererComponent ,并且对Renderer许多尝试仅适用于具体的Columns

You could use a custom renderer to do this. 您可以使用自定义渲染器执行此操作。 It can be done as follows : 可以按照以下步骤完成:

 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;
    }

  };;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM