como he leído que no es posible para codificar mi lengua NavajoJTable fila hightlighter basado en el valor de TableCell
finging la manera cómo única alternativa/rayas de color en JTable (ejemplo @camickr)
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
public class TableRowRenderingTip extends JPanel {
private static final long serialVersionUID = 1L;
public TableRowRenderingTip() {
Object[] columnNames = {"Type", "Company", "Shares", "Price", "Boolean"};
Object[][] data = {
{"Buy", "IBM", new Integer(1000), new Double(80.5), Boolean.TRUE},
{"Sell", "Dell", new Integer(2000), new Double(6.25), Boolean.FALSE},
{"Short Sell", "Apple", new Integer(3000), new Double(7.35), Boolean.TRUE},
{"Buy", "MicroSoft", new Integer(4000), new Double(27.50), Boolean.FALSE},
{"Short Sell", "Cisco", new Integer(5000), new Double(20), Boolean.TRUE}
};
DefaultTableModel model = new DefaultTableModel(data, columnNames) {
private static final long serialVersionUID = 1L;
@Override
public Class getColumnClass(int column) {
return getValueAt(0, column).getClass();
}
};
JTabbedPane tabbedPane = new JTabbedPane();
tabbedPane.addTab("Alternating", createAlternating(model));
add(tabbedPane);
}
private JComponent createAlternating(DefaultTableModel model) {
JTable table = new JTable(model) {
private static final long serialVersionUID = 1L;
@Override
public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
Component c = super.prepareRenderer(renderer, row, column);
if (!isRowSelected(row)) { // Alternate row color
c.setBackground(row % 2 == 0 ? getBackground() : Color.LIGHT_GRAY);
}
return c;
}
};
table.setPreferredScrollableViewportSize(table.getPreferredSize());
return new JScrollPane(table);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
createAndShowGUI();
}
});
}
public static void createAndShowGUI() {
JFrame.setDefaultLookAndFeelDecorated(false);
JFrame frame = new JFrame("Table Row Rendering");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TableRowRenderingTip());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
tengo un JTable
que contiene algunas operaciones de mercado (mejor para la comprensión por la razón mis conocimientos de inglés pobres), pero algunas de ofertas tiene una sola pierna, pero otro (por ejemplo de intercambio de vainilla Cross Currency) podría tener dos piernas. ¿Cómo se puede resaltar TableRows
según el valor de los detalles TableColumn
(por ejemplo, la última columna con el nombre DealId). Traté de comprobar row
con row - 1 && row + 1
, pero mi cabeza vacía generó muchos códigosRow, a la idea de cómo detener cosas sencillas simples complicadas, cómo comprobar si existe valor duplicado en otra fila (siempre con un orden estricto como se captura en las imágenes) Ni idea de cómo se implementa una fórmula simple para que
imágenes demostró:
generado a partir de código:
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
public class TablePrepareRenderer extends JFrame {
private static final long serialVersionUID = 1L;
private Object[] columnNames = {
"Buy/Sell", "Type", "SubType", "Ccy1", "Amount1", "Ccy2", "Amount2", "DealId"};
private Object[][] data = {
{"Buy&Sell", "Ccy Swap", "A1", "EUR", new Double(1000000.00), "USD", new Double(1439000.00), 50},
{"Buy&Sell", "Ccy Swap", "A3", "USD", new Double(1438900.00), "EUR", new Double(1000000.00), 50},
{"Buy&Sell", "Ccy Swap", "A1", "EUR", new Double(500000.00), "CHF", new Double(550000.00), 350},
{"Buy&Sell", "Ccy Swap", "A1", "CHF", new Double(549800.00), "EUR", new Double(500000.00), 350},
{"Sell&Buy", "Ccy Swap", "A3", "USD", new Double(1000000.00), "EUR", new Double(749000.00), 2250},
{"Sell&Buy", "Ccy Swap", "A1", "EUR", new Double(748900.00), "USD", new Double(1000000.00), 2250},
{"Buy&Sell", "Ccy Swap", "A1", "GBP", new Double(1000000.00), "USD", new Double(1638100.00), 400},
{"Buy&Sell", "Ccy Swap", "A3", "USD", new Double(1638200.00), "GBP", new Double(1000000.00), 400},
{"Sell", "Ccy Spot", "A1", "AUD", new Double(343575.0), "EUR", new Double(250000.0), 11990},
{"Buy", "Ccy Spot", "A1", "EUR", new Double(100000.00), "JPY", new Double(1099000.00), 259},
{"Sell", "Ccy Fwd", "A3", "DKK", new Double(74889.00), "EUR", new Double(10000.00), 115439},};
private JTable table;
public TablePrepareRenderer() {
DefaultTableModel model = new DefaultTableModel(data, columnNames);
table = new JTable(model) {
private static final long serialVersionUID = 1L;
@Override
public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
Component c = super.prepareRenderer(renderer, row, column);
JComponent jc = (JComponent) c;
/*if (!isRowSelected(row)) {
c.setBackground(getBackground());
int modelRow = convertRowIndexToModel(row);
String type = (String) getModel().getValueAt(modelRow, 0);
if (("Buy".equals(type)) && !("Buy&Sell".equals(type))) {
c.setBackground(Color.orange);
} else if (("Sell".equals(type)) && !("Sell&Buy".equals(type))) {
c.setBackground(Color.orange);
} else if ("Buy&Sell".equals(type)) {
c.setBackground(Color.yellow);
} else if ("Sell&Buy".equals(type)) {
c.setBackground(Color.yellow);
}
}*/
/*if (!isRowSelected(row)) {
if (row == 0 ||row == 1||row == 4||row == 6||row == 7||row == 9||row == 10) {
((JComponent) c).setBackground(Color.orange);
} else {
((JComponent) c).setBackground(Color.yellow);
}
}*/
if (!isRowSelected(row)) {
if (row == 0 || row == 1 || row == 4 || row == 5 || row == 8 || row == 10) {
((JComponent) c).setBackground(Color.orange);
} else {
((JComponent) c).setBackground(Color.yellow);
}
}
if (column == 0 || column == 1 || column == 2 || column == 3 || column == 5) {
//setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
//c.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
//(JComponent) c.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
}
return c;
}
@Override
public Class getColumnClass(int column) {
switch (column) {
case 0:
return String.class;
case 1:
return String.class;
case 2:
return String.class;
case 3:
return String.class;
case 4:
return Double.class;
case 5:
return String.class;
case 6:
return Double.class;
case 7:
return Integer.class;
}
return null;
}
};
table.setPreferredScrollableViewportSize(table.getPreferredSize());
JScrollPane scrollPane = new JScrollPane(table);
getContentPane().add(scrollPane);
}
public static void main(String[] args) {
TablePrepareRenderer frame = new TablePrepareRenderer();
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
Editar:
cómo configurar Alignment
para TableCell
en prepareRenderer
,
En este momento, ¿cuál es su objetivo final? ¿Qué imágenes de arriba muestran la salida deseada y qué imágenes muestran la salida actual? –
@Hovercraft Full Of Eels para todas las combinaciones/imágenes posibles, y esperaba agrupar el marcador para todas las combinaciones posibles que existen, basado en el valor que devuelve TableCell – mKorbel
¿Estás diciendo que las 3 imágenes muestran el color deseado? Parece que el color de la fila debería cambiar cada vez que cambia el valor 'dealld'? ¿Es ese el simple requisito o es más complejo que eso? – camickr