所以我试图根据单元格的结果在jtable中将行的颜色更改为红色 将此代码放在下面,应该可以工作,但注意到更改
她是代码,如果任何人可以对它进行一些修改那就太棒了,谢谢
public class Test1 extends JFrame {
private JPanel contentPane;
private JTable table;
private static JTable getNewRenderedTable(final JTable table) {
table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer(){
@Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row, int col) {
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col);
int status = (int)table.getModel().getValueAt(row, 4);
if (status<=0) {
setBackground(Color.RED);
setForeground(Color.BLACK);
} else {
setBackground(table.getBackground());
setForeground(table.getForeground());
}
return this;
}
});
return table;
}
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Test1 frame = new Test1();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public Test1() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
try
{ Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","");
String query="select * from employes";
PreparedStatement pst=con.prepareStatement(query);
ResultSet rs=pst.executeQuery();
ResultSetMetaData rsm=rs.getMetaData();
int c=rsm.getColumnCount();
Vector column=new Vector(3);
column.add(rsm.getColumnName(1));
column.add(rsm.getColumnName(2));
column.add(rsm.getColumnName(3));
column.add("date");
Vector row=new Vector();
Vector data=new Vector();
while(rs.next())
{
row=new Vector();
row.add(rs.getString("id"));
row.add(rs.getString("nom"));
row.add(rs.getString("prenom"));
Timer time=new Timer(rs.getString("date_de_embauche").toString());
int j=(int) time.getResulte();
row.add(j);
data.add(row);
}
table = new JTable(data,column);
}
catch(Exception e)
{
System.out.println(e);
}
table.setBounds(33, 28, 335, 203);
contentPane.add(table);
}}
答案 0 :(得分:3)
table = new JTable(data,column);
您当前代码的问题在于您创建了一个新的JTable。无论何时创建新表,都会丢失自定义渲染器。因此,您需要在创建表后将渲染器添加到表中。我没有看到您调用getNewRenderedTable(...)
方法添加渲染器的位置。
另一个问题是你应该使用JScrollPane来显示表格,然后将滚动窗格添加到框架中。
最后不要使用null布局。 Swing旨在与布局管理器一起使用。
我试图在jtable中将行的颜色更改为红色,具体取决于单元格的结果
JTable可以为列中的每种类型的数据使用不同的渲染器。您可以通过覆盖prepareRenderer(...)
的{{1}}方法来执行行级渲染,而不是为每种数据类型创建自定义渲染器。
代码的基本结构是:
JTable
查看Table Row Rendering以获取显示如何根据行中的数据为行着色的示例。
答案 1 :(得分:0)
11-29 16:17:30.397 17160-31330/com.android.appname E/RESPONSE STATUS: ITS HTTP_OK
11-29 16:17:30.398 17160-31330/com.android.appname E/Res: N
11-29 16:17:30.399 17160-31330/com.android.appname E/AndroidRuntime: FATAL EXCEPTION: Thread-7023
11-29 16:17:30.399 17160-31330/com.android.appname E/AndroidRuntime: Process: com.android.appname, PID: 17160
11-29 16:17:30.399 17160-31330/com.android.appname E/AndroidRuntime: java.lang.ArrayIndexOutOfBoundsException: length=1; index=1
11-29 16:17:30.399 17160-31330/com.android.appname E/AndroidRuntime: at com.android.appname.Pages.Articles.AllArticlesFragment$3.run(AllArticlesFragment.java:302)
11-29 16:17:30.399 17160-31330/com.android.appname E/AndroidRuntime: at java.lang.Thread.run(Thread.java:818)