The problem regard the resizeability of the other dockable frames in the DockableHolder.
The Dockable Frame containing the Browser component take all the available space and the other Dockable frames remains at minimum size.
If the Browser is inserted into a DocumentPane there are no problems.
The code to reproduce the bug is:
- Code: Select all
import javax.swing.*;
import com.jidesoft.docking.*;
public class BrowserInDockableFrame {
public static void main(String[] args) {
DefaultDockableHolder f = new DefaultDockableHolder();
DockingManager dm = f.getDockingManager();
String currentLookAndFeel = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel";
try {
UIManager.setLookAndFeel(currentLookAndFeel);
} catch (Exception e) {
e.printStackTrace();
}
SwingUtilities.updateComponentTreeUI(f);
dm.setProfileKey("testBrowser");
dm.hideWorkspace();
dm.beginLoadLayoutData();
DockableFrame df = null;
df = new DockableFrame("panel 00");
df.getContext().setInitSide(com.jidesoft.docking.DockContext.DOCK_SIDE_WEST);
df.getContext().setInitIndex(0);
dm.setHeavyweightComponentEnabled(true);
// df.getContentPane().add(new JScrollPane(new JTextArea("panel [0,0]")));
df.getContentPane().add(new Browser());
dm.addFrame(df);
df = new DockableFrame("panel 10");
df.getContext().setInitSide(com.jidesoft.docking.DockContext.DOCK_SIDE_WEST);
df.getContext().setInitIndex(1);
df.getContentPane().add(new JScrollPane(new JTextArea("panel [1,0]")));
dm.addFrame(df);
df = new DockableFrame("panel 01");
df.getContext().setInitSide(com.jidesoft.docking.DockContext.DOCK_SIDE_EAST);
df.getContext().setInitIndex(0);
df.getContentPane().add(new JScrollPane(new JTextArea("panel [0,1]")));
dm.addFrame(df);
df = new DockableFrame("panel 11");
df.getContext().setInitSide(com.jidesoft.docking.DockContext.DOCK_SIDE_EAST);
df.getContext().setInitIndex(1);
df.getContentPane().add(new JScrollPane(new JTextArea("panel [1,1]")));
dm.addFrame(df);
dm.loadLayoutDataFrom("temp");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
The Browser class and the libraries used are available athttps://jdic.dev.java.net/servlets/ProjectDocumentList?expandFolder=4183&folderID=6267, but the code is:
- Code: Select all
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.SwingConstants;
import java.io.File;
import java.net.*;
import org.jdesktop.jdic.browser.*;
public class Browser extends JPanel {
public static ImageIcon browseIcon = new ImageIcon(Browser.class.getResource("images/Right.gif"));
BorderLayout borderLayout1 = new BorderLayout();
JToolBar jBrowserToolBar = new JToolBar();
JButton jStopButton = new JButton("Stopp",
new ImageIcon(getClass().getResource("images/Stop.png")));
JButton jRefreshButton = new JButton("Refresh",
new ImageIcon(getClass().getResource("images/Reload.png")));
JButton jForwardButton = new JButton("Forward",
new ImageIcon(getClass().getResource("images/Forward.png")));
JButton jBackButton = new JButton("Back",
new ImageIcon(getClass().getResource("images/Back.png")));
JPanel jAddressPanel = new JPanel();
JLabel jAddressLabel = new JLabel();
JTextField jAddressTextField = new JTextField();
JButton jGoButton = new JButton();
JPanel jAddrToolBarPanel = new JPanel();
MyStatusBar statusBar = new MyStatusBar();
JPanel jBrowserPanel = new JPanel();
IWebBrowser webBrowser;
public Browser() {
try {
jbInit();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {}
JFrame frame = new JFrame("JDIC API Demo - Browser");
Container contentPane = frame.getContentPane();
contentPane.setLayout(new GridLayout(1, 1));
contentPane.add(new Browser());
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
frame.pack();
frame.setVisible(true);
}
private void jbInit() throws Exception {
this.setLayout(borderLayout1);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
this.setPreferredSize(new Dimension(screenSize.width * 9 / 10,
screenSize.height * 8 / 10));
ToolTipManager.sharedInstance().setLightWeightPopupEnabled(false);
jAddressLabel.setBorder(BorderFactory.createEmptyBorder(0, 4, 0, 4));
jAddressLabel.setToolTipText("");
jAddressLabel.setText(" URL: ");
jGoButton.setBorder(BorderFactory.createCompoundBorder(new EmptyBorder(0,
2, 0, 2),
new EtchedBorder()));
jGoButton.setMaximumSize(new Dimension(60, 25));
jGoButton.setMinimumSize(new Dimension(60, 25));
jGoButton.setPreferredSize(new Dimension(60, 25));
jGoButton.setToolTipText("Load the given URL");
jGoButton.setIcon(browseIcon);
jGoButton.setText("GO");
jGoButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
jGoButton_actionPerformed(e);
}
});
jAddressPanel.setLayout(new BorderLayout());
jAddressTextField.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
jAddressTextField_actionPerformed(e);
}
});
jBackButton.setToolTipText("Go back one page");
jBackButton.setHorizontalTextPosition(SwingConstants.TRAILING);
jBackButton.setEnabled(false);
jBackButton.setMaximumSize(new Dimension(75, 27));
jBackButton.setPreferredSize(new Dimension(75, 27));
jBackButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
jBackButton_actionPerformed(e);
}
});
jForwardButton.setToolTipText("Go forward one page");
jForwardButton.setEnabled(false);
jForwardButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
jForwardButton_actionPerformed(e);
}
});
jRefreshButton.setToolTipText("Reload current page");
jRefreshButton.setEnabled(true);
jRefreshButton.setMaximumSize(new Dimension(75, 27));
jRefreshButton.setMinimumSize(new Dimension(75, 27));
jRefreshButton.setPreferredSize(new Dimension(75, 27));
jRefreshButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
jRefreshButton_actionPerformed(e);
}
});
jStopButton.setToolTipText("Stop loading this page");
jStopButton.setVerifyInputWhenFocusTarget(true);
jStopButton.setText("Stop");
jStopButton.setEnabled(true);
jStopButton.setMaximumSize(new Dimension(75, 27));
jStopButton.setMinimumSize(new Dimension(75, 27));
jStopButton.setPreferredSize(new Dimension(75, 27));
jStopButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
jStopButton_actionPerformed(e);
}
});
jAddressPanel.add(jAddressLabel, BorderLayout.WEST);
jAddressPanel.add(jAddressTextField, BorderLayout.CENTER);
jAddressPanel.add(jGoButton, BorderLayout.EAST);
jAddressPanel.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createEtchedBorder(),
BorderFactory.createEmptyBorder(2, 0, 2, 0)));
jBrowserToolBar.setFloatable(false);
jBrowserToolBar.add(jBackButton, null);
jBrowserToolBar.add(jForwardButton, null);
jBrowserToolBar.addSeparator();
jBrowserToolBar.add(jRefreshButton, null);
jBrowserToolBar.add(jStopButton, null);
jBrowserToolBar.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createEtchedBorder(),
BorderFactory.createEmptyBorder(2, 2, 2, 0)));
jAddrToolBarPanel.setLayout(new BorderLayout());
jAddrToolBarPanel.add(jAddressPanel, BorderLayout.CENTER);
jAddrToolBarPanel.add(jBrowserToolBar, BorderLayout.WEST);
jAddrToolBarPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 2, 0));
statusBar.setBorder(BorderFactory.createEmptyBorder(2, 0, 0, 0));
statusBar.lblDesc.setText("JDIC API Demo - Browser");
try {
BrowserEngineManager bem = BrowserEngineManager.instance();
bem.setActiveEngine(BrowserEngineManager.IE);
webBrowser = bem.getActiveEngine().getWebBrowser();
webBrowser.setURL(new URL("http://java.net"));
// Print out debug messages in the command line.
//webBrowser.setDebug(true);
} catch (MalformedURLException e) {
System.out.println(e.getMessage());
return;
}
webBrowser.addWebBrowserListener(new WebBrowserListener() {
public void downloadStarted(WebBrowserEvent event) {
updateStatusInfo("Loading started.");
}
public void initializationCompleted(WebBrowserEvent event){;}
public void downloadCompleted(WebBrowserEvent event) {
jBackButton.setEnabled(webBrowser.isBackEnabled());
jForwardButton.setEnabled(webBrowser.isForwardEnabled());
updateStatusInfo("Loading completed.");
URL currentUrl = webBrowser.getURL();
if (currentUrl != null) {
jAddressTextField.setText(currentUrl.toString());
}
}
public void downloadProgress(WebBrowserEvent event) {
// updateStatusInfo("Loading in progress...");
}
public void downloadError(WebBrowserEvent event) {
updateStatusInfo("Loading error.");
}
public void documentCompleted(WebBrowserEvent event) {
updateStatusInfo("Document loading completed.");
}
public void titleChange(WebBrowserEvent event) {
updateStatusInfo("Title of the browser window changed.");
}
public void statusTextChange(WebBrowserEvent event) {
// updateStatusInfo("Status text changed.");
}
public void windowClose(WebBrowserEvent event) {;}
});
jBrowserPanel.setLayout(new BorderLayout());
jBrowserPanel.add(webBrowser.asComponent(), BorderLayout.CENTER);
this.add(jAddrToolBarPanel, BorderLayout.NORTH);
this.add(statusBar, BorderLayout.SOUTH);
this.add(jBrowserPanel, BorderLayout.CENTER);
}
void updateStatusInfo(String statusMessage) {
statusBar.lblStatus.setText(statusMessage);
}
/**
* Check the current input URL string in the address text field, load it,
* and update the status info and toolbar info.
*/
void loadURL() {
String inputValue = jAddressTextField.getText();
if (inputValue == null) {
JOptionPane.showMessageDialog(this, "The given URL is NULL:",
"Warning", JOptionPane.WARNING_MESSAGE);
} else {
// Check if the text value is a URL string.
URL curUrl = null;
try {
// Check if the input string is a local path by checking if it starts
// with a driver name(on Windows) or root path(on Unix).
File[] roots = File.listRoots();
for (int i = 0; i < roots.length; i++) {
if (inputValue.toLowerCase().startsWith(roots[i].toString().toLowerCase())) {
File curLocalFile = new File(inputValue);
curUrl = curLocalFile.toURL();
break;
}
}
if (curUrl == null) {
// Check if the text value is a valid URL.
try {
curUrl = new URL(inputValue);
} catch (MalformedURLException e) {
if (inputValue.toLowerCase().startsWith("ftp.")) {
curUrl = new URL("ftp://" + inputValue);
} else if (inputValue.toLowerCase().startsWith("gopher.")) {
curUrl = new URL("gopher://" + inputValue);
} else {
curUrl = new URL("http://" + inputValue);
}
}
}
webBrowser.setURL(curUrl);
// Update the address text field, statusbar, and toolbar info.
updateStatusInfo("Loading " + curUrl.toString() + " ......");
} catch (MalformedURLException mue) {
JOptionPane.showMessageDialog(this,
"The given URL is not valid:" + inputValue, "Warning",
JOptionPane.WARNING_MESSAGE);
}
}
}
void jGoButton_actionPerformed(ActionEvent e) {
loadURL();
}
void jAddressTextField_actionPerformed(ActionEvent e) {
loadURL();
}
void jBackButton_actionPerformed(ActionEvent e) {
webBrowser.back();
}
void jForwardButton_actionPerformed(ActionEvent e) {
webBrowser.forward();
}
void jRefreshButton_actionPerformed(ActionEvent e) {
webBrowser.refresh();
}
void jStopButton_actionPerformed(ActionEvent e) {
webBrowser.stop();
}
}
[/quote]