Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > JPanel dentro de JFrame no se visualiza.

Hola, estoy "simulando" lo que seria un navegador web, creando un JPanel y agregandolo a un JFrame, para ello utilizo la libreria : DJNativeSwing-SWT-1-0-3-20131217
si ejecuto la clase WebBrowserUI desde su main() se lanza sin problema y se visualiza correctamente, ahora cuando la llamo desde un ActionPerformed desde otra clase solo se visualiza el "marco" exterior del JFrame y no el Jpanel.
aqui dejo el codigo :

public class Ventana extends javax.swing.JFrame {
private Ventana() {
super();

final ActionListener navegadorWeb = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
UIUtils.setPreferredLookAndFeel();
NativeInterface.open();
// SwingUtilities.invokeLater(new Runnable() {
// @Override
// public void run() {
JFrame frame = new JFrame("Navegador Web");
// frame.setLayout(null);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(WebBrowserUI.create(), BorderLayout.CENTER);
frame.setSize(800, 600);
frame.setLocationByPlatform(true);
frame.setVisible(true);
// }
//});
NativeInterface.runEventPump();
}
};

}
}

public class WebBrowserUI extends JPanel {

private static final long serialVersionUID = 1_726_821_059_472_413_971L;

/**
* <p>
* @return
*/
public static WebBrowserUI create() {
return new WebBrowserUI();
}

private WebBrowserUI() {

super(new BorderLayout());
JPanel webBrowserPanel = new JPanel(new BorderLayout());
webBrowserPanel.setBorder(BorderFactory.createTitledBorder("Navegador Web"));
final JWebBrowser webBrowser = new JWebBrowser();
webBrowser.navigate("https://www.google.com");
webBrowserPanel.add(webBrowser, BorderLayout.CENTER);
add(webBrowserPanel, BorderLayout.CENTER);
// Crear una barra adicional que permite mostrar / ocultar la barra de menús del navegador web.
JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 4, 4));
JCheckBox menuBarCheckBox = new JCheckBox("Menu Bar", webBrowser.isMenuBarVisible());
menuBarCheckBox.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
webBrowser.setMenuBarVisible(e.getStateChange() == ItemEvent.SELECTED);
}
});
buttonPanel.add(menuBarCheckBox);
add(buttonPanel, BorderLayout.SOUTH);
}

public static void main(String[] args) {
UIUtils.setPreferredLookAndFeel();

NativeInterface.open();
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame("Navegador Web");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(new WebBrowserUI(), BorderLayout.CENTER);
frame.setSize(800, 600);
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
});
NativeInterface.runEventPump();
}

alguna idea de como se soluciona ??

febrero 20, 2014 | Registered Commenterdmorales

dentro de la libreria mencionada "DJNativeSwing-SWT-1-0-3-20131217" utilizo tres librerias que son :
DJNativeSwing.jar
DJNativeSwing-SWT.jar
swt-4.3-win32-win32-x86.jar

Me parece que esto tiene que ver con el EDT o algo de Swing por lo cual no se ve el JPanel.
Ya le he probado de varias formas y dado vueltas al asunto sin exito..... alguna ayuda de porque no se "pinta" ?

febrero 25, 2014 | Registered Commenterdmorales

Por lo que veo JWebBrowser da problemas !!! por lo que noto debo lanzar dentro de un hilo independiente ya que Swing tiene problemas cuando varios hilos intentan modificar la interfaz, y el JWebBrowser tiene internamente varios hilo que actualizan varias veces la interfaz puede haber problemas, para evitar este problema se usa el método invokeLater de SwingUtilities y por ultimo se debe llamar al método NativeInterface.runEventPump();
pero aun asi por algun motivo todavia no logro dar con la solucion....... alguna ayuda ??

febrero 26, 2014 | Registered Commenterdmorales