java swing timer jtable renderer

java - JTable con tapajuntas de celda



swing timer (1)

Encuentro un artículo para tu respuesta:

http://www.devx.com/DevX/10MinuteSolution/17167/0/page/1

La página proporciona el código fuente para descargar.

Básicamente, utiliza el siguiente método para notificar a la tabla para actualizar la celda oportunamente.

JTable.tableChanged(new TableModelEvent(table.getModel(), firstRow, lastRow, column));

Después de leer su código, ordeno una versión más simple de su código, puedes cambiar mi código o usar su código (más elegante pero también más complejo).

public class FlashCellTable { public static Color color; public static void main(String[] args) { JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); frame.setLocationRelativeTo(null); frame.setSize(800, 600); final JTable table = new JTable(4, 4); table.setDefaultRenderer(Object.class, new MyFlashingCellRenderer()); table.setValueAt("Flashing", 0, 0); frame.getContentPane().add(new JScrollPane(table)); final long startTime = System.currentTimeMillis(); Thread thread = new Thread() { @Override public void run() { while (true) { long now = System.currentTimeMillis(); long second = (now - startTime) / 1000; color = second / 2 * 2 == second ? Color.red : Color.blue; System.out.println("FlashCellTable.run"); SwingUtilities.invokeLater(new Runnable() { public void run() { table.tableChanged(new TableModelEvent(table.getModel(), 0, 0, 0)); } }); try { Thread.sleep(1000); } catch(InterruptedException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } } } }; thread.start(); frame.setVisible(true); } public static class MyFlashingCellRenderer extends DefaultTableCellRenderer { @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { JLabel label = (JLabel)super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); if ("Flashing".equals(value)) { label.setBackground(color); } else { label.setBackground(Color.white); } return label; } } }

Estoy escribiendo una aplicación usando la biblioteca Swing en Java. Tengo un componente de tabla que extiende JTable , y en este componente he anulado el método getTableCellRendererComponent , porque getTableCellRendererComponent las celdas de la tabla. Tengo un modelo de tabla personalizado (que se extiende desde el modelo de tabla predeterminado) y el componente de tabla en sí mismo que he agregado a un JPanel. Todo esto funciona

Ahora me gustaría agregar a esta tabla, algunas funcionalidades para tener una celda parpadeando. Potencialmente, más de una celda puede estar parpadeando a la vez, es decir, celdas en (fila 1, columna 2) y (fila 3, columna 4).

¿Es posible hacer esto? Cualquier sugerencia que pueda ayudarme a comenzar sería apreciada.