Example usage for com.jgoodies.forms.layout FormLayout appendRow

List of usage examples for com.jgoodies.forms.layout FormLayout appendRow

Introduction

In this page you can find the example usage for com.jgoodies.forms.layout FormLayout appendRow.

Prototype

public void appendRow(RowSpec rowSpec) 

Source Link

Document

Appends the given row specification to the bottom of all rows.

Usage

From source file:loci.ome.notes.editor.TemplateEditor.java

License:Open Source License

/** Add a new column to the current tab. */
private void addRow() {
    JPanel selected = (JPanel) tabPane.getSelectedComponent();
    FormLayout layout = (FormLayout) selected.getLayout();
    layout.appendRow(new RowSpec("pref:grow"));

    int ndx = tabPane.getSelectedIndex();

    for (int i = 0; i < layout.getColumnCount(); i++) {
        addIcon(selected, layout.getRowCount() - 1, i, ndx);
    }/* w  ww.jav a 2s  . c o  m*/
    tabPane.repaint();
}

From source file:loci.ome.notes.Notes.java

License:Open Source License

/** Set up a new field in the current tab. */
private void setupField(TemplateField field, int col, int r, int[] rowNumber, JPanel panel) {
    JComponent c = field.getComponent();

    if (field.getType().equals("thumbnail")) {
        BufferedImage thumbnail = null;
        if (field.getValueMap() == null && thumb.size() > 0) {
            thumbnail = (BufferedImage) thumb.get(r);
        } else if (field.getValueMap() != null) {
            try {
                BufferedImageReader tempReader = new BufferedImageReader();
                tempReader.setId(field.getValueMap());
                if (tempReader.getImageCount() > 0) {
                    thumbnail = tempReader.openThumbImage(0);
                }//from   w w w .jav  a  2 s.com
                tempReader.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        if (thumbnail != null) {
            ((JLabel) c).setIcon(new ImageIcon(thumbnail));
        }
    }

    int cndx = (field.getColumn() - 1) * 4 + col;
    int rowNdx = field.getRow() == -1 ? rowNumber[cndx - 1] : 2 * field.getRow();
    FormLayout layout = (FormLayout) panel.getLayout();
    if (rowNdx > layout.getRowCount() - 1) {
        layout.appendRow(new RowSpec("pref:grow"));
        layout.appendRow(new RowSpec("pref"));
    }

    panel.add(new JLabel(field.getName()), CC.xy(cndx, rowNdx));
    panel.add(c, CC.xy(cndx + 1, rowNdx));

    if (field.getRow() == -1) {
        rowNumber[cndx - 1]++;
        rowNumber[cndx]++;
    }

    if (rowNdx > rowNumber[1]) {
        for (int i = 0; i < col - 1; i++) {
            rowNumber[i] = rowNdx + 2;
        }
    }
}

From source file:net.rptools.maptool.client.ui.token.EditTokenDialog.java

License:Open Source License

private void updateStatesPanel() {
    // Group the states first into individual panels
    List<BooleanTokenOverlay> overlays = new ArrayList<BooleanTokenOverlay>(
            MapTool.getCampaign().getTokenStatesMap().values());
    Map<String, JPanel> groups = new TreeMap<String, JPanel>();
    groups.put("", new JPanel(new FormLayout("0px:grow 2px 0px:grow 2px 0px:grow 2px 0px:grow")));
    for (BooleanTokenOverlay overlay : overlays) {
        String group = overlay.getGroup();
        if (group != null && (group = group.trim()).length() != 0) {
            JPanel panel = groups.get(group);
            if (panel == null) {
                panel = new JPanel(new FormLayout("0px:grow 2px 0px:grow 2px 0px:grow 2px 0px:grow"));
                panel.setBorder(BorderFactory.createTitledBorder(group));
                groups.put(group, panel);
            }/*from   w  w  w  . ja  v  a 2 s.  c om*/
        }
    }
    // Add the group panels and bar panel to the states panel
    JPanel panel = getStatesPanel();
    panel.removeAll();
    FormLayout layout = new FormLayout("0px:grow");
    panel.setLayout(layout);
    int row = 1;
    for (JPanel gPanel : groups.values()) {
        layout.appendRow(new RowSpec("pref"));
        layout.appendRow(new RowSpec("2px"));
        panel.add(gPanel, new CellConstraints(1, row));
        row += 2;
    }
    layout.appendRow(new RowSpec("pref"));
    layout.appendRow(new RowSpec("2px"));
    JPanel barPanel = new JPanel(new FormLayout("right:pref 2px pref 5px right:pref 2px pref"));
    panel.add(barPanel, new CellConstraints(1, row));

    // Add the individual check boxes.
    for (BooleanTokenOverlay state : overlays) {
        String group = state.getGroup();
        panel = groups.get("");
        if (group != null && (group = group.trim()).length() != 0)
            panel = groups.get(group);
        int x = panel.getComponentCount() % 4;
        int y = panel.getComponentCount() / 4;
        if (x == 0) {
            layout = (FormLayout) panel.getLayout();
            if (y != 0)
                layout.appendRow(new RowSpec("2px"));
            layout.appendRow(new RowSpec("pref"));
        }
        panel.add(new JCheckBox(state.getName()), new CellConstraints(x * 2 + 1, y * 2 + 1));
    }
    // Add sliders to the bar panel
    if (MapTool.getCampaign().getTokenBarsMap().size() > 0) {
        layout = (FormLayout) barPanel.getLayout();
        barPanel.setName("bar");
        barPanel.setBorder(BorderFactory.createTitledBorder("Bars"));
        int count = 0;
        row = 0;
        for (BarTokenOverlay bar : MapTool.getCampaign().getTokenBarsMap().values()) {
            int working = count % 2;
            if (working == 0) { // slider row
                layout.appendRow(new RowSpec("pref"));
                row += 1;
            }
            JPanel labelPanel = new JPanel(new FormLayout("pref", "pref 2px:grow pref"));
            barPanel.add(labelPanel, new CellConstraints(1 + working * 4, row));
            labelPanel.add(new JLabel(bar.getName() + ":"),
                    new CellConstraints(1, 1, CellConstraints.RIGHT, CellConstraints.TOP));
            JSlider slider = new JSlider(0, 100);
            JCheckBox hide = new JCheckBox("Hide");
            hide.putClientProperty("JSlider", slider);
            hide.addChangeListener(new ChangeListener() {
                public void stateChanged(ChangeEvent e) {
                    JSlider js = (JSlider) ((JCheckBox) e.getSource()).getClientProperty("JSlider");
                    js.setEnabled(!((JCheckBox) e.getSource()).isSelected());
                }
            });
            labelPanel.add(hide, new CellConstraints(1, 3, CellConstraints.RIGHT, CellConstraints.TOP));
            slider.setName(bar.getName());
            slider.setPaintLabels(true);
            slider.setPaintTicks(true);
            slider.setMajorTickSpacing(20);
            slider.createStandardLabels(20);
            slider.setMajorTickSpacing(10);
            barPanel.add(slider, new CellConstraints(3 + working * 4, row));
            if (working != 0) { // spacer row
                layout.appendRow(new RowSpec("2px"));
                row += 1;
            }
            count += 1;
        }
    }
}

From source file:net.sf.jabref.gui.mergeentries.MergeEntries.java

License:Open Source License

/**
 * Main function for building the merge entry JPanel
 */// w  w  w. ja va2 s.c o m
private void initialize() {

    joint = new TreeSet<>(one.getFieldNames());
    joint.addAll(two.getFieldNames());

    // Remove field starting with __
    TreeSet<String> toberemoved = new TreeSet<>();
    for (String field : joint) {
        if (field.startsWith("__")) {
            toberemoved.add(field);
        }
    }

    for (String field : toberemoved) {
        joint.remove(field);
    }

    // Create storage arrays
    rb = new JRadioButton[3][joint.size() + 1];
    ButtonGroup[] rbg = new ButtonGroup[joint.size() + 1];
    identical = new Boolean[joint.size() + 1];
    jointStrings = new String[joint.size()];

    // Create main layout
    String colSpecMain = "left:pref, 5px, center:3cm:grow, 5px, center:pref, 3px, center:pref, 3px, center:pref, 5px, center:3cm:grow";
    String colSpecMerge = "left:pref, 5px, fill:3cm:grow, 5px, center:pref, 3px, center:pref, 3px, center:pref, 5px, fill:3cm:grow";
    String rowSpec = "pref, pref, 10px, fill:5cm:grow, 10px, pref, 10px, fill:3cm:grow";
    StringBuilder rowBuilder = new StringBuilder("");
    for (int i = 0; i < joint.size(); i++) {
        rowBuilder.append("pref, ");
    }
    rowBuilder.append("pref");

    FormLayout mainLayout = new FormLayout(colSpecMain, rowSpec);
    FormLayout mergeLayout = new FormLayout(colSpecMerge, rowBuilder.toString());
    mainPanel.setLayout(mainLayout);
    mergePanel.setLayout(mergeLayout);

    JLabel label = new JLabel(Localization.lang("Use"));
    Font font = label.getFont();
    label.setFont(font.deriveFont(font.getStyle() | Font.BOLD));

    mainPanel.add(label, cc.xyw(4, 1, 7, "center, bottom"));

    // Set headings
    JLabel[] headingLabels = new JLabel[6];
    for (int i = 0; i < 6; i++) {
        headingLabels[i] = new JLabel(columnHeadings[i]);
        font = headingLabels[i].getFont();
        headingLabels[i].setFont(font.deriveFont(font.getStyle() | Font.BOLD));
        mainPanel.add(headingLabels[i], cc.xy(1 + (i * 2), 2));

    }

    mainPanel.add(new JSeparator(), cc.xyw(1, 3, 11));

    // Start with entry type
    String type1 = one.getType();
    String type2 = two.getType();

    mergedEntry.setType(type1);
    label = new JLabel(Localization.lang("Entry type"));
    font = label.getFont();
    label.setFont(font.deriveFont(font.getStyle() | Font.BOLD));
    mergePanel.add(label, cc.xy(1, 1));

    JTextArea type1ta = new JTextArea(type1);
    type1ta.setEditable(false);
    mergePanel.add(type1ta, cc.xy(3, 1));
    if (type1.compareTo(type2) == 0) {
        identical[0] = true;
    } else {
        identical[0] = false;
        rbg[0] = new ButtonGroup();
        for (int k = 0; k < 3; k += 2) {
            rb[k][0] = new JRadioButton();
            rbg[0].add(rb[k][0]);
            mergePanel.add(rb[k][0], cc.xy(5 + (k * 2), 1));
            rb[k][0].addChangeListener(e -> updateAll());
        }
        rb[0][0].setSelected(true);
    }
    JTextArea type2ta = new JTextArea(type2);
    type2ta.setEditable(false);
    mergePanel.add(type2ta, cc.xy(11, 1));

    // For all fields in joint add a row and possibly radio buttons
    int row = 2;
    int maxLabelWidth = -1;
    int tmpLabelWidth = 0;
    for (String field : joint) {
        jointStrings[row - 2] = field;
        label = new JLabel(CaseChangers.UPPER_FIRST.format(field));
        font = label.getFont();
        label.setFont(font.deriveFont(font.getStyle() | Font.BOLD));
        mergePanel.add(label, cc.xy(1, row));
        String string1 = one.getField(field);
        String string2 = two.getField(field);
        identical[row - 1] = false;
        if ((string1 != null) && (string2 != null) && (string1.equals(string2))) {
            identical[row - 1] = true;
        }

        tmpLabelWidth = label.getPreferredSize().width;
        if (tmpLabelWidth > maxLabelWidth) {
            maxLabelWidth = tmpLabelWidth;
        }

        if ("abstract".equals(field) || "review".equals(field)) {
            // Treat the abstract and review fields special
            JTextArea tf = new JTextArea();
            tf.setLineWrap(true);
            tf.setEditable(false);
            JScrollPane jsptf = new JScrollPane(tf);

            mergeLayout.setRowSpec(row, RowSpec.decode("center:2cm:grow"));
            mergePanel.add(jsptf, cc.xy(3, row, "f, f"));
            tf.setText(string1);
            tf.setCaretPosition(0);

        } else {
            JTextArea tf = new JTextArea(string1);
            mergePanel.add(tf, cc.xy(3, row));
            tf.setCaretPosition(0);
            tf.setEditable(false);
        }

        // Add radio buttons if the two entries do not have identical fields
        if (identical[row - 1]) {
            mergedEntry.setField(field, string1);
        } else {
            rbg[row - 1] = new ButtonGroup();
            for (int k = 0; k < 3; k++) {
                rb[k][row - 1] = new JRadioButton();
                rbg[row - 1].add(rb[k][row - 1]);
                mergePanel.add(rb[k][row - 1], cc.xy(5 + (k * 2), row));
                rb[k][row - 1].addChangeListener(e -> updateAll());
            }
            if (string1 == null) {
                rb[0][row - 1].setEnabled(false);
                mergedEntry.setField(field, string2);
                rb[2][row - 1].setSelected(true);
            } else {
                mergedEntry.setField(field, string1);
                rb[0][row - 1].setSelected(true);
                if (string2 == null) {
                    rb[2][row - 1].setEnabled(false);
                }
            }
        }

        if ("abstract".equals(field) || "review".equals(field)) {
            // Again, treat abstract and review special
            JTextArea tf = new JTextArea();
            tf.setLineWrap(true);
            tf.setEditable(false);
            JScrollPane jsptf = new JScrollPane(tf);

            mergePanel.add(jsptf, cc.xy(11, row, "f, f"));
            tf.setText(string2);
            tf.setCaretPosition(0);

        } else {
            JTextArea tf = new JTextArea(string2);
            mergePanel.add(tf, cc.xy(11, row));
            tf.setCaretPosition(0);
            tf.setEditable(false);
        }

        row++;
    }

    JScrollPane scrollPane = new JScrollPane(mergePanel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
            JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    scrollPane.setBorder(BorderFactory.createEmptyBorder());
    mainPanel.add(scrollPane, cc.xyw(1, 4, 11));
    mainPanel.add(new JSeparator(), cc.xyw(1, 5, 11));

    // Synchronize column widths
    String[] rbAlign = { "right", "center", "left" };
    mainLayout.setColumnSpec(1, ColumnSpec.decode(Integer.toString(maxLabelWidth) + "px"));
    Integer maxRBWidth = -1;
    Integer tmpRBWidth;
    for (int k = 0; k < 3; k++) {
        tmpRBWidth = headingLabels[k + 2].getPreferredSize().width;
        if (tmpRBWidth > maxRBWidth) {
            maxRBWidth = tmpRBWidth;
        }
    }
    for (int k = 0; k < 3; k++) {
        mergeLayout.setColumnSpec(5 + (k * 2), ColumnSpec.decode(rbAlign[k] + ":" + maxRBWidth + "px"));
    }

    // Setup a PreviewPanel and a Bibtex source box for the merged entry
    label = new JLabel(Localization.lang("Merged entry"));
    font = label.getFont();
    label.setFont(font.deriveFont(font.getStyle() | Font.BOLD));
    mainPanel.add(label, cc.xyw(1, 6, 6));

    String layoutString = Globals.prefs.get(JabRefPreferences.PREVIEW_0);
    pp = new PreviewPanel(null, mergedEntry, null, new MetaData(), layoutString);
    // JScrollPane jsppp = new JScrollPane(pp, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    mainPanel.add(pp, cc.xyw(1, 8, 6));

    label = new JLabel(Localization.lang("Merged BibTeX source code"));
    font = label.getFont();
    label.setFont(font.deriveFont(font.getStyle() | Font.BOLD));
    mainPanel.add(label, cc.xyw(8, 6, 4));

    jta = new JTextArea();
    jta.setLineWrap(true);
    JScrollPane jspta = new JScrollPane(jta);
    mainPanel.add(jspta, cc.xyw(8, 8, 4));
    jta.setEditable(false);
    StringWriter sw = new StringWriter();
    try {
        new BibEntryWriter(new LatexFieldFormatter(), false).write(mergedEntry, sw, type);
    } catch (IOException ex) {
        LOGGER.error("Error in entry" + ": " + ex.getMessage(), ex);
    }
    jta.setText(sw.getBuffer().toString());
    jta.setCaretPosition(0);

    // Add some margin around the layout
    mainLayout.appendRow(RowSpec.decode(MARGIN));
    mainLayout.appendColumn(ColumnSpec.decode(MARGIN));
    mainLayout.insertRow(1, RowSpec.decode(MARGIN));
    mainLayout.insertColumn(1, ColumnSpec.decode(MARGIN));

    if (mainPanel.getHeight() > DIM.height) {
        mainPanel.setSize(new Dimension(mergePanel.getWidth(), DIM.height));
    }
    if (mainPanel.getWidth() > DIM.width) {
        mainPanel.setSize(new Dimension(DIM.width, mergePanel.getHeight()));
    }

    // Everything done, allow any action to actually update the merged entry
    doneBuilding = true;

    // Show what we've got
    mainPanel.setVisible(true);
    javax.swing.SwingUtilities.invokeLater(() -> scrollPane.getVerticalScrollBar().setValue(0));
}

From source file:net.sf.jabref.gui.mergeentries.MergeEntriesDialog.java

License:Open Source License

/**
 * Sets up the dialog/*from   w  ww  . ja va  2 s  .c om*/
 *
 * @param selected Selected BibtexEntries
 */
private void init(List<BibEntry> selected) {

    // Check if there are two entries selected
    if (selected.size() != 2) { // None selected. Inform the user to select entries first.
        JOptionPane.showMessageDialog(panel.frame(),
                Localization.lang("You have to choose exactly two entries to merge."), MERGE_ENTRIES,
                JOptionPane.INFORMATION_MESSAGE);
        this.dispose();
        return;
    }

    // Store the two entries
    BibEntry one = selected.get(0);
    BibEntry two = selected.get(1);

    MergeEntries mergeEntries = new MergeEntries(one, two, panel.getBibDatabaseContext().getMode());

    // Create undo-compound
    NamedCompound ce = new NamedCompound(MERGE_ENTRIES);

    FormLayout layout = new FormLayout("fill:700px:grow", "fill:400px:grow, 4px, p, 5px, p");
    this.setLayout(layout);

    this.add(mergeEntries.getMergeEntryPanel(), cc.xy(1, 1));
    this.add(new JSeparator(), cc.xy(1, 3));

    // Create buttons
    ButtonBarBuilder bb = new ButtonBarBuilder();
    bb.addGlue();
    JButton cancel = new JButton(Localization.lang("Cancel"));
    cancel.setActionCommand("cancel");
    cancel.addActionListener(e -> {
        panel.output(Localization.lang("Cancelled merging entries"));
        dispose();
    });

    JButton replaceentries = new JButton(MERGE_ENTRIES);
    replaceentries.setActionCommand("replace");
    replaceentries.addActionListener(e -> {
        // Create a new entry and add it to the undo stack
        // Remove the other two entries and add them to the undo stack (which is not working...)
        BibEntry mergedEntry = mergeEntries.getMergeEntry();
        panel.insertEntry(mergedEntry);
        ce.addEdit(new UndoableInsertEntry(panel.database(), mergedEntry, panel));
        ce.addEdit(new UndoableRemoveEntry(panel.database(), one, panel));
        panel.database().removeEntry(one);
        ce.addEdit(new UndoableRemoveEntry(panel.database(), two, panel));
        panel.database().removeEntry(two);
        ce.end();
        panel.undoManager.addEdit(ce);
        panel.output(Localization.lang("Merged entries"));
        dispose();
    });

    bb.addButton(new JButton[] { replaceentries, cancel });
    this.add(bb.getPanel(), cc.xy(1, 5));

    // Add some margin around the layout
    layout.appendRow(RowSpec.decode(MARGIN));
    layout.appendColumn(ColumnSpec.decode(MARGIN));
    layout.insertRow(1, RowSpec.decode(MARGIN));
    layout.insertColumn(1, ColumnSpec.decode(MARGIN));

    // Set up a ComponentListener that saves the last size and position of the dialog
    this.addComponentListener(new ComponentAdapter() {

        @Override
        public void componentResized(ComponentEvent e) {
            // Save dialog position
            pw.storeWindowPosition();
        }

        @Override
        public void componentMoved(ComponentEvent e) {
            // Save dialog position
            pw.storeWindowPosition();
        }
    });

    pw = new PositionWindow(this, JabRefPreferences.MERGEENTRIES_POS_X, JabRefPreferences.MERGEENTRIES_POS_Y,
            JabRefPreferences.MERGEENTRIES_SIZE_X, JabRefPreferences.MERGEENTRIES_SIZE_Y);
    pw.setWindowPosition();

    // Show what we've got
    setVisible(true);
}

From source file:net.sf.jabref.gui.mergeentries.MergeEntryDOIDialog.java

License:Open Source License

/**
 * Sets up the dialog//from  ww w .j  a v a  2s  .c o  m
 */
private void init() {
    mergeEntries = new MergeEntries(this.originalEntry, this.doiEntry, Localization.lang("Original entry"),
            Localization.lang("Entry from DOI"), panel.getBibDatabaseContext().getMode());

    // Create undo-compound
    ce = new NamedCompound(Localization.lang("Merge from DOI"));

    FormLayout layout = new FormLayout("fill:700px:grow", "fill:400px:grow, 4px, p, 5px, p");
    // layout.setColumnGroups(new int[][] {{3, 11}});
    this.setLayout(layout);

    this.add(mergeEntries.getMergeEntryPanel(), cc.xy(1, 1));
    this.add(new JSeparator(), cc.xy(1, 3));

    // Create buttons
    ButtonBarBuilder bb = new ButtonBarBuilder();
    bb.addGlue();
    JButton cancel = new JButton(Localization.lang("Cancel"));
    cancel.setActionCommand("cancel");
    cancel.addActionListener(e -> buttonPressed(e.getActionCommand()));

    JButton replaceentry = new JButton(Localization.lang("Replace original entry"));
    replaceentry.setActionCommand("done");
    replaceentry.addActionListener(e -> buttonPressed(e.getActionCommand()));

    bb.addButton(new JButton[] { replaceentry, cancel });
    this.add(bb.getPanel(), cc.xy(1, 5));

    // Add some margin around the layout
    layout.appendRow(RowSpec.decode(MARGIN));
    layout.appendColumn(ColumnSpec.decode(MARGIN));
    layout.insertRow(1, RowSpec.decode(MARGIN));
    layout.insertColumn(1, ColumnSpec.decode(MARGIN));

    pw = new PositionWindow(this, JabRefPreferences.MERGEENTRIES_POS_X, JabRefPreferences.MERGEENTRIES_POS_Y,
            JabRefPreferences.MERGEENTRIES_SIZE_X, JabRefPreferences.MERGEENTRIES_SIZE_Y);
    pw.setWindowPosition();

    // Set up a ComponentListener that saves the last size and position of the dialog
    addComponentListener(new ComponentAdapter() {

        @Override
        public void componentResized(ComponentEvent e) {
            // Save dialog position
            pw.storeWindowPosition();
        }

        @Override
        public void componentMoved(ComponentEvent e) {
            // Save dialog position
            pw.storeWindowPosition();
        }
    });

    // Show what we've got
    setVisible(true);

}

From source file:net.sf.jabref.gui.MergeEntriesDialog.java

License:Open Source License

private void init(BibtexEntry[] selected) {

    // Check if there are two entries selected
    if (selected.length != 2) { // None selected. Inform the user to select entries first.
        JOptionPane.showMessageDialog(frame, Globals.lang("You have to choose exactly two entries to merge."),
                Globals.lang("Merge entries"), JOptionPane.INFORMATION_MESSAGE);
        this.dispose();
        return;/* ww w . j  a va  2s.  c  o  m*/
    }

    // Store the two entries
    one = selected[0];
    two = selected[1];

    // Create undo-compound
    ce = new NamedCompound(Globals.lang("Merge entries"));

    joint = new TreeSet<String>(one.getAllFields());
    joint.addAll(two.getAllFields());

    // Remove field starting with __
    Set<String> toberemoved = new TreeSet<String>();
    for (String field : joint) {
        if (field.startsWith("__")) {
            toberemoved.add(field);
        }
    }

    for (String field : toberemoved) {
        joint.remove(field);
    }

    // Create storage arrays
    rb = new JRadioButton[3][joint.size() + 1];
    ButtonGroup[] rbg = new ButtonGroup[joint.size() + 1];
    identical = new Boolean[joint.size() + 1];
    jointStrings = new String[joint.size()];

    // Create layout
    String colSpec = "left:pref, 5px, fill:4cm:grow, 5px, right:pref, 3px, center:pref, 3px, left:pref, 5px, fill:4cm:grow";
    StringBuilder rowBuilder = new StringBuilder("pref, 10px, pref, ");
    for (int i = 0; i < joint.size(); i++) {
        rowBuilder.append("pref, ");
    }
    rowBuilder.append("10px, top:4cm:grow, 10px, pref");

    FormLayout layout = new FormLayout(colSpec, rowBuilder.toString());
    // layout.setColumnGroups(new int[][] {{3, 11}});
    this.setLayout(layout);

    // Set headings
    for (int i = 0; i < 6; i++) {
        JLabel label = new JLabel(columnHeadings[i]);
        Font font = label.getFont();
        label.setFont(font.deriveFont(font.getStyle() | Font.BOLD));
        this.add(label, cc.xy(1 + (i * 2), 1));

    }

    this.add(new JSeparator(), cc.xyw(1, 2, 11));

    // Start with entry type
    BibtexEntryType type1 = one.getType();
    BibtexEntryType type2 = two.getType();

    mergedEntry.setType(type1);
    JLabel label = new JLabel(Globals.lang("Entry type"));
    Font font = label.getFont();
    label.setFont(font.deriveFont(font.getStyle() | Font.BOLD));
    this.add(label, cc.xy(1, 3));

    JTextArea type1ta = new JTextArea(type1.getName());
    type1ta.setEditable(false);
    this.add(type1ta, cc.xy(3, 3));
    if (type1.compareTo(type2) != 0) {
        identical[0] = false;
        rbg[0] = new ButtonGroup();
        for (int k = 0; k < 3; k += 2) {
            rb[k][0] = new JRadioButton();
            rbg[0].add(rb[k][0]);
            this.add(rb[k][0], cc.xy(5 + (k * 2), 3));
            rb[k][0].addChangeListener(new ChangeListener() {

                @Override
                public void stateChanged(ChangeEvent e) {
                    updateAll();
                }
            });
        }
        rb[0][0].setSelected(true);
    } else {
        identical[0] = true;
    }
    JTextArea type2ta = new JTextArea(type2.getName());
    type2ta.setEditable(false);
    this.add(type2ta, cc.xy(11, 3));

    // For all fields in joint add a row and possibly radio buttons
    int row = 4;
    for (String field : joint) {
        jointStrings[row - 4] = field;
        label = new JLabel(StringUtil.toUpperFirstLetter(field));
        font = label.getFont();
        label.setFont(font.deriveFont(font.getStyle() | Font.BOLD));
        this.add(label, cc.xy(1, row));
        String string1 = one.getField(field);
        String string2 = two.getField(field);
        identical[row - 3] = false;
        if ((string1 != null) && (string2 != null)) {
            if (string1.equals(string2)) {
                identical[row - 3] = true;
            }
        }

        if (field.equals("abstract")) {
            // Treat the abstract field special, maybe more fields? Review? Note?
            JTextArea tf = new JTextArea();
            tf.setLineWrap(true);
            tf.setEditable(false);
            JScrollPane jsptf = new JScrollPane(tf);

            layout.setRowSpec(row, RowSpec.decode("center:2cm:grow"));
            this.add(jsptf, cc.xy(3, row, "f, f"));
            tf.setText(string1);
            tf.setCaretPosition(0);

        } else {
            JTextArea tf = new JTextArea(string1);
            this.add(tf, cc.xy(3, row));
            tf.setCaretPosition(0);
            tf.setEditable(false);
        }

        // Add radio buttons if the two entries do not have identical fields
        if (!identical[row - 3]) {
            rbg[row - 3] = new ButtonGroup();
            for (int k = 0; k < 3; k++) {
                rb[k][row - 3] = new JRadioButton();
                rbg[row - 3].add(rb[k][row - 3]);
                this.add(rb[k][row - 3], cc.xy(5 + (k * 2), row));
                rb[k][row - 3].addChangeListener(new ChangeListener() {

                    @Override
                    public void stateChanged(ChangeEvent e) {
                        updateAll();
                    }
                });
            }
            if (string1 != null) {
                mergedEntry.setField(field, string1);
                rb[0][row - 3].setSelected(true);
            } else {
                mergedEntry.setField(field, string2);
                rb[2][row - 3].setSelected(true);
            }
        } else {
            mergedEntry.setField(field, string1);
        }
        if (field.equals("abstract")) {
            // Again, treat abstract special
            JTextArea tf = new JTextArea();
            tf.setLineWrap(true);
            tf.setEditable(false);
            JScrollPane jsptf = new JScrollPane(tf);

            this.add(jsptf, cc.xy(11, row, "f, f"));
            tf.setText(string2);
            tf.setCaretPosition(0);

        } else {
            JTextArea tf = new JTextArea(string2);
            this.add(tf, cc.xy(11, row));
            tf.setCaretPosition(0);
            tf.setEditable(false);
        }

        row++;
    }

    this.add(new JSeparator(), cc.xyw(1, row, 11));
    row++;

    // Setup a PreviewPanel and a Bibtex source box for the merged entry
    label = new JLabel(Globals.lang("Merged entry"));
    font = label.getFont();
    label.setFont(font.deriveFont(font.getStyle() | Font.BOLD));
    this.add(label, cc.xy(1, row));

    String layoutString = Globals.prefs.get(JabRefPreferences.PREVIEW_0);
    pp = new PreviewPanel(null, mergedEntry, null, new MetaData(), layoutString);
    // JScrollPane jsppp = new JScrollPane(pp);
    this.add(pp, cc.xyw(3, row, 3));

    jta = new JTextArea();
    jta.setLineWrap(true);
    JScrollPane jspta = new JScrollPane(jta);
    this.add(jspta, cc.xyw(9, row, 3));
    jta.setEditable(false);
    StringWriter sw = new StringWriter();
    try {
        mergedEntry.write(sw, new LatexFieldFormatter(), false);
    } catch (IOException ex) {
        System.err.println(Globals.lang("Error in entry" + ": " + ex.getMessage()));
    }
    jta.setText(sw.getBuffer().toString());
    jta.setCaretPosition(0);
    row++;
    this.add(new JSeparator(), cc.xyw(1, row, 11));
    row++;

    // Create buttons
    ButtonBarBuilder bb = new ButtonBarBuilder();
    bb.addGlue();
    JButton cancel = new JButton(Globals.lang("Cancel"));
    cancel.setActionCommand("cancel");
    cancel.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            buttonPressed(e.getActionCommand());
        }
    });

    JButton newentry = new JButton(Globals.lang("Add new entry and keep both old entries"));
    newentry.setActionCommand("newentry");
    newentry.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            buttonPressed(e.getActionCommand());
        }
    });

    JButton replaceentries = new JButton(Globals.lang("Replace old entries with new entry"));
    replaceentries.setActionCommand("replace");
    replaceentries.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            buttonPressed(e.getActionCommand());
        }
    });

    bb.addButton(new JButton[] { replaceentries, newentry, cancel });
    this.add(bb.getPanel(), cc.xyw(1, row, 11));

    // Add some margin around the layout
    layout.appendRow(RowSpec.decode("10px"));
    layout.appendColumn(ColumnSpec.decode("10px"));
    layout.insertRow(1, RowSpec.decode("10px"));
    layout.insertColumn(1, ColumnSpec.decode("10px"));

    pack();

    if (getHeight() > DIM.height) {
        setSize(new Dimension(getWidth(), DIM.height));
    }
    if (getWidth() > DIM.width) {
        setSize(new Dimension(DIM.width, getHeight()));
    }

    // Everything done, allow any action to actually update the merged entry
    doneBuilding = true;

    // Show what we've got
    setVisible(true);

}

From source file:omr.glyph.ui.EvaluationBoard.java

License:Open Source License

private void defineLayout() {
    final String buttonWidth = Panel.getButtonWidth();
    final String fieldInterval = Panel.getFieldInterval();
    final String fieldInterline = Panel.getFieldInterline();

    FormLayout layout = new FormLayout(buttonWidth + "," + fieldInterval + "," + buttonWidth + ","
            + fieldInterval + "," + buttonWidth + "," + fieldInterval + "," + buttonWidth, "");

    int visibleButtons = Math.min(constants.visibleButtons.getValue(), selector.buttons.size());

    for (int i = 0; i < visibleButtons; i++) {
        layout.appendRow(FormFactory.PREF_ROWSPEC);
    }//from  www .  j ava  2 s  .  c  om

    // Uncomment following line to have fixed sized rows, whether
    // they are filled or not
    ///layout.setRowGroups(new int[][]{{1, 3, 4, 5 }});
    PanelBuilder builder = new PanelBuilder(layout, getBody());
    builder.setDefaultDialogBorder();

    CellConstraints cst = new CellConstraints();

    //        if (sheet != null) {
    //            builder.add(testButton, cst.xy(3, r));
    //            builder.add(testPercent, cst.xy(5, r));
    //            builder.add(testResult, cst.xy(7, r));
    //        }
    for (int i = 0; i < visibleButtons; i++) {
        int r = i + 1; // --------------------------------
        builder.add(selector.buttons.get(i).grade, cst.xy(1, r));

        if (sheet != null) {
            builder.add(selector.buttons.get(i).button, cst.xyw(3, r, 5));
        } else {
            builder.add(selector.buttons.get(i).field, cst.xyw(3, r, 5));
        }
    }
}

From source file:org.audiveris.omr.glyph.ui.EvaluationBoard.java

License:Open Source License

private void defineLayout() {
    String colSpec = Panel.makeColumns(3);
    FormLayout layout = new FormLayout(colSpec, "");

    int visibleButtons = Math.min(constants.visibleButtons.getValue(), selector.buttons.size());

    for (int i = 0; i < visibleButtons; i++) {
        if (i != 0) {
            layout.appendRow(FormSpecs.LINE_GAP_ROWSPEC);
        }//from ww  w .  ja  va 2s . co  m

        layout.appendRow(FormSpecs.PREF_ROWSPEC);
    }

    PanelBuilder builder = new PanelBuilder(layout, getBody());
    CellConstraints cst = new CellConstraints();

    for (int i = 0; i < visibleButtons; i++) {
        int r = (2 * i) + 1; // --------------------------------
        EvalButton evb = selector.buttons.get(i);
        builder.add(evb.grade, cst.xy(5, r));
        builder.add(isActive ? evb.button : evb.field, cst.xyw(7, r, 5));
    }
}

From source file:org.drugis.addis.gui.builder.TreatmentCategorizationView.java

License:Open Source License

private JComponent buildOverviewPanel() {
    final FormLayout layout = new FormLayout("fill:pref:grow", "p");

    final PanelBuilder builder = new PanelBuilder(layout);
    final CellConstraints cc = new CellConstraints();
    int row = 1;/*  w ww. ja  v  a  2  s . c  o  m*/

    builder.addSeparator(CategoryKnowledgeFactory.getCategoryKnowledge(Drug.class).getSingularCapitalized(),
            cc.xy(1, row));
    row = LayoutUtil.addRow(layout, row);
    builder.add(DrugView.createDrugOverviewPanel(d_model.getDrugPresentation()), cc.xy(1, row));
    layout.appendRow(RowSpec.decode("10dlu"));
    row += 1;

    row = LayoutUtil.addRow(layout, row);
    builder.addSeparator("Dose categories", cc.xy(1, row));
    for (final Category category : d_model.getBean().getCategories()) {
        row = LayoutUtil.addRow(layout, row);
        builder.addSeparator(CategoryKnowledgeFactory.getCategoryKnowledge(Study.class).getPlural()
                + " measuring this " + CategoryKnowledgeFactory.getCategoryKnowledge(Drug.class).getSingular()
                + " categorized as '" + category.getName() + "'", cc.xy(1, row));
        row = LayoutUtil.addRow(layout, row);
        String criterionLabel = category.getCriterionLabel();
        String[] criteria = StringUtils.splitByWholeSeparator(criterionLabel, " OR ");
        criterionLabel = StringUtils.join(criteria, " OR\n");
        builder.add(
                AuxComponentFactory.createAutoWrapLabel(
                        new UnmodifiableHolder<String>("Inclusion criteria: " + criterionLabel)),
                cc.xy(1, row));
        row = LayoutUtil.addRow(layout, row);

        builder.add(DrugView.buildStudyListComponent(d_model.getCategorizedStudyList(category),
                Main.getMainWindow()), cc.xy(1, row));
        layout.appendRow(RowSpec.decode("10dlu"));
        row += 1;
    }
    return builder.getPanel();
}