by Anonymous » 09 Sep 2025, 15:51
Ich habe begonnen, JCEF in einem mir zu implementieren, und ich initialisiert den eingebetteten Browser in einem JinternalFrame innerhalb eines JFrame neben einer Reihe von Formfeldern auf einem JPanel neben dem JinternalFrame . Die Browserkomponente initialisiert nicht vollständig, wenn der JFrame tatsächlich sichtbar wird, und ich stelle fest, dass mein JTextField nicht ausgewiesen ist, es sei denn, der JFrame verliert und erwidert den Fokus. Dies geschieht nur, wenn ein JinternalFrame mit der JCEF -Komponente verwendet wird ...
Es passiert auch jedes Mal, wenn ich Loadurl aufrufe, um eine neue Seite im Browser zu laden: Das JTextField wird wieder eineditabel, bis ich im JFRame . /> Update < /strong>:
Ich habe einen Hack gefunden, mit dem das JTextField < /code> wieder bearbeitetbar wird, aber ich würde es nicht als Lösung bezeichnen, weil es nicht sehr elegant ist. Ich habe der CEFClient -Instanz (client.addloadHandler (neuer cefloadHandlerAdapter ()) ) mit einem @ovveride in der OnLoadingStatechange -Methode einen Zugriff auf die aktuelle Browserkomponente hinzugefügt. Von dort aus kann ich beim Laden des Browsers erkennen, und verwenden Sie SwingUtilities, um das Fenster zu erhalten, in dem sich die Browserkomponente befindet. Dann setze ich auf diesem Fenster ein (falsch) und setvisible (true) . Ich sage, es ist keine Lösung, denn jedes Mal, wenn der Browser das Laden des Fensters verschwindet und wieder auftaucht. Obwohl die JTextField wieder bearbeitet werden können, ist es ziemlich hässlich zu sehen, wie das Fenster blinkt. Ich habe alle Arten von revalidate () und repaint () methodien ohne Verfügbarkeit ausprobiert, es sei denn
Code: Select all
client.addLoadHandler(new CefLoadHandlerAdapter() {
@Override
public void onLoadingStateChange(CefBrowser browser, boolean isLoading,
boolean canGoBack, boolean canGoForward) {
if (!isLoading) {
//browser_ready = true;
System.out.println("Browser has finished loading!");
SwingUtilities.windowForComponent( browser.getUIComponent() ).setVisible(false);
SwingUtilities.windowForComponent( browser.getUIComponent() ).setVisible(true);
}
}
});
Wenn jemand eine bessere Lösung vorschlagen kann, bitte tun Sie!
Ich habe begonnen, JCEF in einem mir zu implementieren, und ich initialisiert den eingebetteten Browser in einem JinternalFrame innerhalb eines JFrame neben einer Reihe von Formfeldern auf einem JPanel neben dem JinternalFrame . Die Browserkomponente initialisiert nicht vollständig, wenn der JFrame tatsächlich sichtbar wird, und ich stelle fest, dass mein JTextField nicht ausgewiesen ist, es sei denn, der JFrame verliert und erwidert den Fokus. Dies geschieht nur, wenn ein JinternalFrame mit der JCEF -Komponente verwendet wird ...
Es passiert auch jedes Mal, wenn ich Loadurl aufrufe, um eine neue Seite im Browser zu laden: Das JTextField wird wieder eineditabel, bis ich im JFRame . /> Update < /strong>:
Ich habe einen Hack gefunden, mit dem das JTextField < /code> wieder bearbeitetbar wird, aber ich würde es nicht als Lösung bezeichnen, weil es nicht sehr elegant ist. Ich habe der CEFClient -Instanz (client.addloadHandler (neuer cefloadHandlerAdapter ()) ) mit einem @ovveride in der OnLoadingStatechange -Methode einen Zugriff auf die aktuelle Browserkomponente hinzugefügt. Von dort aus kann ich beim Laden des Browsers erkennen, und verwenden Sie SwingUtilities, um das Fenster zu erhalten, in dem sich die Browserkomponente befindet. Dann setze ich auf diesem Fenster ein (falsch) und setvisible (true) . Ich sage, es ist keine Lösung, denn jedes Mal, wenn der Browser das Laden des Fensters verschwindet und wieder auftaucht. Obwohl die JTextField wieder bearbeitet werden können, ist es ziemlich hässlich zu sehen, wie das Fenster blinkt. Ich habe alle Arten von revalidate () und repaint () methodien ohne Verfügbarkeit ausprobiert, es sei denn[code]client.addLoadHandler(new CefLoadHandlerAdapter() {
@Override
public void onLoadingStateChange(CefBrowser browser, boolean isLoading,
boolean canGoBack, boolean canGoForward) {
if (!isLoading) {
//browser_ready = true;
System.out.println("Browser has finished loading!");
SwingUtilities.windowForComponent( browser.getUIComponent() ).setVisible(false);
SwingUtilities.windowForComponent( browser.getUIComponent() ).setVisible(true);
}
}
});
[/code]
Wenn jemand eine bessere Lösung vorschlagen kann, bitte tun Sie!