尝试更改Jtable java中

时间:2015-11-29 16:17:51

标签: java sql-server swing jtable

所以我试图根据单元格的结果在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);
}}

2 个答案:

答案 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)