153 lines
5.4 KiB
Java
153 lines
5.4 KiB
Java
/*
|
|
* Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved.
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
*
|
|
* This code is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License version 2 only, as
|
|
* published by the Free Software Foundation. Oracle designates this
|
|
* particular file as subject to the "Classpath" exception as provided
|
|
* by Oracle in the LICENSE file that accompanied this code.
|
|
*
|
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
* version 2 for more details (a copy is included in the LICENSE file that
|
|
* accompanied this code).
|
|
*
|
|
* You should have received a copy of the GNU General Public License version
|
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
*
|
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
|
* or visit www.oracle.com if you need additional information or have any
|
|
* questions.
|
|
*/
|
|
|
|
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) {
|
|
// Use the outer panel width, not the scrolling gridPanel
|
|
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;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|