package com.bc.ceres.swing; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.UIManager; import javax.swing.WindowConstants; import javax.swing.border.EmptyBorder; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class GridGuiTest2 { public static void main(String[] args) { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { e.printStackTrace(); } JFrame frame = new JFrame(Grid.class.getSimpleName()); frame.getContentPane().add(createGridPanel(), BorderLayout.CENTER); frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); frame.setSize(340, 340); frame.setVisible(true); } static JPanel createGridPanel() { final Grid grid = new Grid(6, false); grid.getLayout().setTablePadding(4, 3); grid.getLayout().setTableAnchor(TableLayout.Anchor.BASELINE); grid.getLayout().setTableAnchor(TableLayout.Anchor.NORTHWEST); grid.getLayout().setColumnFill(2, TableLayout.Fill.HORIZONTAL); grid.getLayout().setColumnFill(3, TableLayout.Fill.HORIZONTAL); grid.getLayout().setColumnFill(4, TableLayout.Fill.HORIZONTAL); grid.getLayout().setColumnWeightX(2, 1.0); grid.getLayout().setColumnWeightX(3, 1.0); grid.getLayout().setColumnWeightX(4, 1.0); grid.setHeaderRow( /*1*/ new JLabel("<html><b>Agg.</b>"), /*2*/ new JLabel("<html><b>Source</b>"), /*3*/ new JLabel("<html><b>Targets</b>"), /*4*/ new JLabel("<html><b>Parameters</b>"), /*5*/ null ); ListControlBar gridControlBar = ListControlBar.create(ListControlBar.HORIZONTAL, grid, new GridController(grid)); final JCheckBox sel = new JCheckBox(); sel.setToolTipText("Show/hide selection column"); sel.setBorderPaintedFlat(true); sel.setBorderPainted(false); sel.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { grid.setShowSelectionColumn(sel.isSelected()); } }); gridControlBar.add(sel, 0); JPanel panel = new JPanel(new BorderLayout(4, 4)); panel.setBorder(new EmptyBorder(4, 4, 4, 4)); panel.add(new JScrollPane(grid), BorderLayout.CENTER); panel.add(gridControlBar, BorderLayout.SOUTH); return panel; } static class GridController extends ListControlBar.AbstractListController { final Grid grid; private GridController(Grid grid) { this.grid = grid; } @Override public boolean addRow(int index) { String[] AGGS = new String[]{"AVG", "AVG_ML", "PERCENTILE", "ON_MAX_SET", "MIN_MAX_SET", "COUNT"}; int n = AGGS.length; final JButton button = new JButton("..."); button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { int rowIndex = grid.findDataRowIndex(button); JOptionPane.showMessageDialog(grid, "Editing row #" + rowIndex); } }); grid.addDataRow( /*1*/ new JLabel("<html><b>" + (AGGS[random(n)]) + "</b>"), /*2*/ new JLabel("<html>" + genName()), /*3*/ new JLabel("<html>" + genNames(1 + random(2), "<br/>")), /*4*/ new JLabel("<html>" + genNames(1 + random(3), "<br/>")), /*5*/ button); return true; } @Override public boolean removeRows(int[] indices) { grid.removeDataRows(indices); return true; } @Override public boolean moveRowUp(int index) { grid.moveDataRowUp(index); return true; } @Override public boolean moveRowDown(int index) { grid.moveDataRowDown(index); return true; } } private static int random(int n) { return (int) (Math.random() * n); } public static String genNames(int n, String sep) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < n; i++) { if (sb.length() > 0) { sb.append(sep); } sb.append(genName()); } return sb.toString(); } public static String genName() { int n = 3 + random(8); char[] str = new char[n]; char[] voc = new char[]{'a', 'a', 'a', 'e', 'e', 'e', 'e', 'e', 'i', 'i', 'o', 'o', 'u', 'u', 'y'}; for (int i = 0; i < str.length; i++) { if (i % 2 == 0) { str[i] = voc[random(voc.length)]; } else { str[i] = (char) ('a' + (int) (('z' - 'a') * Math.random())); } } str[0] = Character.toUpperCase(str[0]); return new String(str); } }