Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>You need to read docs about <a href="http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#renderer" rel="nofollow">Renderers</a>. For proper use of it.</p> <p>Next code add custom cell renderer to your column:</p> <pre><code> TableColumn column = table.getColumnModel().getColumn(1); column.setCellRenderer(getRenderer()); </code></pre> <p>Example code for <code>getRenderer</code> method:</p> <pre><code>private static TableCellRenderer getRenderer() { return new DefaultTableCellRenderer(){ @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { boolean solved = false; if (value.toString().endsWith("Solved")) { solved = true; value = value.toString().replace("Solved", ""); } Component tableCellRendererComponent = super.getTableCellRendererComponent(table, value,isSelected, hasFocus, row, column); if (solved) { tableCellRendererComponent.setBackground(Color.GREEN); } else { tableCellRendererComponent.setBackground(table.getBackground()); } return tableCellRendererComponent; } }; } </code></pre> <p>That method returns <a href="http://docs.oracle.com/javase/7/docs/api/javax/swing/table/DefaultTableCellRenderer.html" rel="nofollow">DefaultTableCellRenderer</a>. Here in <code>if-else</code> statement you determine background for cell.</p> <p>EDIT: 1) Changed <code>getRenderer</code> method.</p> <p>2)create your popUp in next way:</p> <pre><code> pm = new JPopupMenu(); pm.add(one); pm.add(two); one.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent me) { if(row != -1) System.out.println("sfsdf" + row); } }); two.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent me) { if(row != -1){ Object valueAt = table.getValueAt(row,1); table.setValueAt(valueAt+"Solved", row,1); ((DefaultTableModel)table.getModel()).fireTableDataChanged(); } } }); </code></pre> <p>because you add Listeners every time you call <code>showPopup</code> method instead of that you must to add it only once as in my example. <code>row</code> field I set as static field.</p> <p>3) your method showPopup changed:</p> <pre><code>private static void showPopup(MouseEvent me) throws FontFormatException, IOException { // is this event a popup trigger? if (pm.isPopupTrigger(me)) { Point p = me.getPoint(); row = table.rowAtPoint(p); final int col = table.columnAtPoint(p); // if we've clicked on a row in the second column if (row != -1 &amp;&amp; col == 1) { final ImageIcon progress = new ImageIcon("images/progress.png"); one.setIcon(progress); final ImageIcon ok = new ImageIcon("images/ok.png"); two.setIcon(ok); one.setText("In progress " + row + "."); two.setText("Solved " + row + "."); pm.show(table, p.x, p.y); } } } </code></pre> <p>4) create your table next way <code>table = new JTable(new DefaultTableModel(data, columnNames));</code></p> <p>If you change your code as I recomended, when you push <strong>Solved</strong> in popUp then cell will be with green background.</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload