[英]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
的视图都使用了prepareRenderer , getTableCellRendererComponent ,并且对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.