Author: [log in to unmask]
Date: Thu Mar 5 10:26:10 2015
New Revision: 2264
Log:
Updated the AbstractTablePanel class to support both horizontal and vertical component alignments. This allows for the EfficiencyTablePanel to be displayed in a manner that will fit reasonably into a component.
Modified:
java/trunk/users/src/main/java/org/hps/users/kmccarty/triggerdiagnostics/ui/AbstractTablePanel.java
java/trunk/users/src/main/java/org/hps/users/kmccarty/triggerdiagnostics/ui/EfficiencyTablePanel.java
Modified: java/trunk/users/src/main/java/org/hps/users/kmccarty/triggerdiagnostics/ui/AbstractTablePanel.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/kmccarty/triggerdiagnostics/ui/AbstractTablePanel.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/kmccarty/triggerdiagnostics/ui/AbstractTablePanel.java Thu Mar 5 10:26:10 2015
@@ -26,15 +26,24 @@
public abstract class AbstractTablePanel extends JPanel implements DiagnosticUpdatable {
// Static variables.
private static final long serialVersionUID = 0L;
+ public static final int ORIENTATION_HORIZONTAL = 0;
+ public static final int ORIENTATION_VERTICAL = 1;
// Components.
+ private JLabel localHeader;
+ private JLabel globalHeader;
protected final JTable localTable;
- private JLabel localHeader;
protected final JTable globalTable;
- private JLabel globalHeader;
+
+ // Component parameters.
+ private boolean horizontal = true;
+ private Dimension userPrefSize = null;
private Dimension defaultPrefSize = new Dimension(0, 0);
- private Dimension userPrefSize = null;
-
+
+ /**
+ * Instantiates an <code>AbstractTablePanel</code>.
+ * @param args Arguments to be usd when generating the panel tables.
+ */
public AbstractTablePanel(Object... args) {
// Initialize the tables.
JTable[] tables = initializeTables(args);
@@ -130,6 +139,28 @@
}
}
+ /**
+ * Sets the orientation of components on the panel.
+ * @param orientation - The orientation identifier. Identifiers can
+ * be obtained as static variables from the within the root object
+ * <code>AbstractTable</code>.
+ */
+ public void setOrientation(int orientation) {
+ if(orientation == ORIENTATION_HORIZONTAL) {
+ if(!horizontal) {
+ horizontal = true;
+ positionComponents();
+ }
+ } else if(orientation == ORIENTATION_VERTICAL) {
+ if(horizontal) {
+ horizontal = false;
+ positionComponents();
+ }
+ } else {
+ throw new IllegalArgumentException("Invalid orienation identifier.");
+ }
+ }
+
@Override
public void setPreferredSize(Dimension preferredSize) {
userPrefSize = preferredSize;
@@ -154,35 +185,63 @@
// Do not update if the components have not been initialized.
if(localHeader == null) { return; }
- // The local components get the left half of the panel and the
- // global components the right. Find half of the panel width,
- // accounting for the internal spacing. This is an internal
- // component, so it does not employ additional spacing between
- // itself and the parent component's edges.
- int compWidth = (getWidth() - 10) / 2;
-
- // If there is any width remaining, it goes to the spacing.
- int horizontal = ComponentUtils.hinternal + (getWidth() - 10) % 2;
-
- // Place the header labels. These are given their preferred
- // height. Note that this means a very small panel may cut off
- // some of the components. First, get the preferred height of
- // the label with the larger preferred height. These should be
- // the same thing, but just in case...
- int labelHeight = localHeader.getPreferredSize().height;
- if(labelHeight < globalHeader.getPreferredSize().height) {
- labelHeight = globalHeader.getPreferredSize().height;
- }
-
- // Set the label sizes and positions.
- localHeader.setBounds(0, 0, compWidth, labelHeight);
- globalHeader.setLocation(ComponentUtils.getNextX(localHeader, horizontal), 0);
- globalHeader.setSize(compWidth, labelHeight);
-
- // The tables go under their respective labels and should fill
- // the remainder of the label height.
- int tableY = ComponentUtils.getNextY(localHeader, ComponentUtils.vinternal);
- localTable.setBounds(0, tableY, compWidth, localTable.getPreferredSize().height);
- globalTable.setBounds(globalHeader.getX(), tableY, compWidth, globalTable.getPreferredSize().height);
+ // If the components should be position horizontally...
+ if(horizontal) {
+ // The local components get the left half of the panel and the
+ // global components the right. Find half of the panel width,
+ // accounting for the internal spacing. This is an internal
+ // component, so it does not employ additional spacing between
+ // itself and the parent component's edges.
+ int compWidth = (getWidth() - 10) / 2;
+
+ // If there is any width remaining, it goes to the spacing.
+ int horizontal = ComponentUtils.hinternal + (getWidth() - 10) % 2;
+
+ // Place the header labels. These are given their preferred
+ // height. Note that this means a very small panel may cut off
+ // some of the components. First, get the preferred height of
+ // the label with the larger preferred height. These should be
+ // the same thing, but just in case...
+ int labelHeight = localHeader.getPreferredSize().height;
+ if(labelHeight < globalHeader.getPreferredSize().height) {
+ labelHeight = globalHeader.getPreferredSize().height;
+ }
+
+ // Set the label sizes and positions.
+ localHeader.setBounds(0, 0, compWidth, labelHeight);
+ globalHeader.setLocation(ComponentUtils.getNextX(localHeader, horizontal), 0);
+ globalHeader.setSize(compWidth, labelHeight);
+
+ // The tables go under their respective labels and should fill
+ // the remainder of the label height.
+ int tableY = ComponentUtils.getNextY(localHeader, ComponentUtils.vinternal);
+ localTable.setBounds(0, tableY, compWidth, localTable.getPreferredSize().height);
+ globalTable.setBounds(globalHeader.getX(), tableY, compWidth, globalTable.getPreferredSize().height);
+ }
+
+ // Otherwise, position them vertically.
+ else {
+ // Place the header labels. These are given their preferred
+ // height. Note that this means a very small panel may cut off
+ // some of the components. First, get the preferred height of
+ // the label with the larger preferred height. These should be
+ // the same thing, but just in case...
+ int labelHeight = localHeader.getPreferredSize().height;
+ if(labelHeight < globalHeader.getPreferredSize().height) {
+ labelHeight = globalHeader.getPreferredSize().height;
+ }
+
+ // The local components go first, taking up the entire upper
+ // width of the panel.
+ localHeader.setBounds(0, 0, getWidth(), labelHeight);
+ localTable.setBounds(0, ComponentUtils.getNextY(localHeader, ComponentUtils.vinternal),
+ getWidth(), localTable.getPreferredSize().height);
+
+ // The global components go immediately below.
+ globalHeader.setBounds(0, ComponentUtils.getNextY(localTable, ComponentUtils.vinternal),
+ getWidth(), labelHeight);
+ globalTable.setBounds(0, ComponentUtils.getNextY(globalHeader, ComponentUtils.vinternal),
+ getWidth(), globalTable.getPreferredSize().height);
+ }
}
}
Modified: java/trunk/users/src/main/java/org/hps/users/kmccarty/triggerdiagnostics/ui/EfficiencyTablePanel.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/kmccarty/triggerdiagnostics/ui/EfficiencyTablePanel.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/kmccarty/triggerdiagnostics/ui/EfficiencyTablePanel.java Thu Mar 5 10:26:10 2015
@@ -17,7 +17,13 @@
/**
* Instantiates a new <code>EfficiencyTablePanel</code>.
*/
- public EfficiencyTablePanel() { super(); }
+ public EfficiencyTablePanel() {
+ // Instantiate the superclass.
+ super();
+
+ // Set the orientation to vertical.
+ setOrientation(ORIENTATION_VERTICAL);
+ }
@Override
public void updatePanel(DiagSnapshot snapshot) {
|