private JPanel setupElementsPane() { JPanel currentPane = new JPanel(); currentPane.setBorder(BorderFactory.createTitledBorder(elementsPaneTitle)); currentPane.setLayout(new GridBagLayout()); // the gridbag constraints instance GridBagConstraints c = new GridBagConstraints(); c.anchor = GridBagConstraints.FIRST_LINE_START; addElementButton = new JButton(addButtonStr); removeElementButton = new JButton(removeButtonStr); c.gridx=1; c.gridy=0; currentPane.add(addElementButton, c); c.gridx=2; c.gridy=0; currentPane.add(removeElementButton, c); tableScroller = setupElementsTable(); c.gridx=1; c.gridy=1; c.weightx=1.0; c.weighty=1.0; c.fill=GridBagConstraints.BOTH; c.gridwidth=GridBagConstraints.REMAINDER; currentPane.add(tableScroller, c); c.weightx=0.0; c.weighty=0.0; c.gridwidth=1; c.fill=GridBagConstraints.NONE; // up/down buttons upElementButton = new BasicArrowButton(SwingConstants.NORTH); downElementButton = new BasicArrowButton(SwingConstants.SOUTH); c.gridx=1; c.gridy=2; currentPane.add(upElementButton, c); c.gridx=2; c.gridy=2; currentPane.add(downElementButton, c); // using a formatted text field rather than a label makes this text // good for copying with the mouse totalCostField = new JFormattedTextField(totalCostFormat); // set to a temporary value totalCostField.setValue(1234560.993); // TODO make this automatically calculated! totalCostField.setColumns(10); totalCostField.addPropertyChangeListener("value", this); totalCostField.setEditable(false); // make it uneditable c.gridx=3; c.gridy=2; currentPane.add(new JLabel(totalLabel), c); c.gridx=4; c.gridy=2; c.weighty=1.0; c.fill=GridBagConstraints.HORIZONTAL; c.gridwidth=GridBagConstraints.REMAINDER; currentPane.add(totalCostField, c); return currentPane; }