Note that there are some explanatory texts on larger screens.

plurals
  1. POJTable row hightlighter based on value from TableCell
    primarykey
    data
    text
    <p>as I read that not possible to Encode my Navajo language </p> <p>finging the way how to only alternate/striped Color into JTable (example @camickr) </p> <p><img src="https://i.stack.imgur.com/5wuVm.jpg" alt="enter image description here"></p> <pre><code>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); } } </code></pre> <p>I have a <code>JTable</code> which contains some market trades (better for understanding by reason my poor English skills), but some of deals has only one leg, but another (for example vanilla Cross Currency Swap) could have two legs. How is possible to hightlighting <code>TableRows</code> based on value from specifics <code>TableColumn</code> (for example last column with name DealId). I tried to check <code>row</code> with <code>row - 1 &amp;&amp; row + 1</code>, but my empty head generated lots of codesRow, to much for idea how to stop complicated simple simple things, how to check if there exist duplicate value in another row (always with strict ordering as captured in the pictures). No idea how to implements simple formula for that</p> <p>pictures demonstrated:</p> <p><img src="https://i.stack.imgur.com/VNTGR.jpg" alt="enter image description here"><br> <img src="https://i.stack.imgur.com/Qvxsp.jpg" alt="enter image description here"> <img src="https://i.stack.imgur.com/v0YHz.jpg" alt="enter image description here"></p> <p>generated from code:</p> <pre><code>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&amp;Sell", "Ccy Swap", "A1", "EUR", new Double(1000000.00), "USD", new Double(1439000.00), 50}, {"Buy&amp;Sell", "Ccy Swap", "A3", "USD", new Double(1438900.00), "EUR", new Double(1000000.00), 50}, {"Buy&amp;Sell", "Ccy Swap", "A1", "EUR", new Double(500000.00), "CHF", new Double(550000.00), 350}, {"Buy&amp;Sell", "Ccy Swap", "A1", "CHF", new Double(549800.00), "EUR", new Double(500000.00), 350}, {"Sell&amp;Buy", "Ccy Swap", "A3", "USD", new Double(1000000.00), "EUR", new Double(749000.00), 2250}, {"Sell&amp;Buy", "Ccy Swap", "A1", "EUR", new Double(748900.00), "USD", new Double(1000000.00), 2250}, {"Buy&amp;Sell", "Ccy Swap", "A1", "GBP", new Double(1000000.00), "USD", new Double(1638100.00), 400}, {"Buy&amp;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)) &amp;&amp; !("Buy&amp;Sell".equals(type))) { c.setBackground(Color.orange); } else if (("Sell".equals(type)) &amp;&amp; !("Sell&amp;Buy".equals(type))) { c.setBackground(Color.orange); } else if ("Buy&amp;Sell".equals(type)) { c.setBackground(Color.yellow); } else if ("Sell&amp;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); } } </code></pre> <p>Edit:</p> <p>how to set <code>Alignment</code> for <code>TableCell</code> into <code>prepareRenderer</code>, </p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

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