|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
|
|
package sun.tools.jconsole; |
|
|
|
import java.awt.*; |
|
import java.util.ArrayList; |
|
|
|
import javax.swing.*; |
|
import javax.swing.border.*; |
|
|
|
|
|
@SuppressWarnings("serial") |
|
class OverviewTab extends Tab { |
|
JPanel gridPanel; |
|
TimeComboBox timeComboBox; |
|
|
|
public static String getTabName() { |
|
return Messages.OVERVIEW; |
|
} |
|
|
|
public OverviewTab(VMPanel vmPanel) { |
|
super(vmPanel, getTabName()); |
|
|
|
setBorder(new EmptyBorder(4, 4, 3, 4)); |
|
setLayout(new BorderLayout()); |
|
|
|
JPanel topPanel = new JPanel(new BorderLayout()); |
|
add(topPanel, BorderLayout.NORTH); |
|
|
|
JPanel controlPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 20, 5)); |
|
topPanel.add(controlPanel, BorderLayout.CENTER); |
|
|
|
timeComboBox = new TimeComboBox(); |
|
LabeledComponent lc = new LabeledComponent(Messages.TIME_RANGE_COLON, |
|
Resources.getMnemonicInt(Messages.TIME_RANGE_COLON), |
|
timeComboBox); |
|
controlPanel.add(lc); |
|
|
|
gridPanel = new JPanel(new AutoGridLayout(10, 6)); |
|
gridPanel.setBorder(null); |
|
JScrollPane sp = new JScrollPane(gridPanel); |
|
sp.setBorder(null); |
|
sp.setViewportBorder(null); |
|
add(sp, BorderLayout.CENTER); |
|
|
|
// Note that panels are added on first update |
|
} |
|
|
|
|
|
public SwingWorker<?, ?> newSwingWorker() { |
|
return new SwingWorker<Object, Object>() { |
|
public Object doInBackground() { |
|
return null; |
|
} |
|
|
|
protected void done() { |
|
if (gridPanel.getComponentCount() == 0) { |
|
final ArrayList<Plotter> plotters = new ArrayList<Plotter>(); |
|
for (Tab tab : vmPanel.getTabs()) { |
|
OverviewPanel[] ops = tab.getOverviewPanels(); |
|
if (ops != null) { |
|
for (OverviewPanel op : ops) { |
|
gridPanel.add(op); |
|
Plotter plotter = op.getPlotter(); |
|
if (plotter != null) { |
|
plotters.add(plotter); |
|
timeComboBox.addPlotter(plotter); |
|
} |
|
} |
|
} |
|
} |
|
if (plotters.size() > 0) { |
|
workerAdd(new Runnable() { |
|
public void run() { |
|
ProxyClient proxyClient = vmPanel.getProxyClient(); |
|
for (Plotter plotter : plotters) { |
|
proxyClient.addWeakPropertyChangeListener(plotter); |
|
} |
|
} |
|
}); |
|
} |
|
if (getParent() instanceof JTabbedPane) { |
|
Utilities.updateTransparency((JTabbedPane)getParent()); |
|
} |
|
} |
|
} |
|
}; |
|
} |
|
|
|
|
|
|
|
private class AutoGridLayout extends GridLayout { |
|
public AutoGridLayout(int hGap, int vGap) { |
|
super(0, 1, hGap, vGap); |
|
} |
|
|
|
public Dimension preferredLayoutSize(Container parent) { |
|
return minimumLayoutSize(parent); |
|
} |
|
|
|
public Dimension minimumLayoutSize(Container parent) { |
|
updateColumns(parent); |
|
return super.minimumLayoutSize(parent); |
|
} |
|
|
|
private void updateColumns(Container parent) { |
|
|
|
int parentWidth = OverviewTab.this.getWidth(); |
|
|
|
int columnWidth = 1; |
|
|
|
for (Component c : parent.getComponents()) { |
|
columnWidth = Math.max(columnWidth, c.getPreferredSize().width); |
|
} |
|
|
|
int n = parent.getComponentCount(); |
|
int maxCols = Math.min(n, parentWidth / columnWidth); |
|
|
|
for (int columns = maxCols; columns >= 1; columns--) { |
|
if (columns == 1) { |
|
setColumns(maxCols); |
|
} else if ((n % columns) == 0) { |
|
setColumns(columns); |
|
break; |
|
} |
|
} |
|
} |
|
} |
|
} |