1Danke
ERLEDIGT
JA
JA
ANTWORTEN
7
7
ZUGRIFFE
451
451
EMPFEHLEN
-
Hallo!
Ich hab ein simples Frame mit einem Textfield. Rechts vom Textfield soll durch ein Popup ein Label angezeigt werden(so wie ein Tooltip). Dieser ist aber leider nicht "verbunden" mit dem frame.
Das heißt wenn ich das Frame verschiebe, so bleibt das popup-Label wo es ist.
Sobald das popup-Label komplett inerhalb des Frames liegt, wird es mitverschoben.
Kan mir da einer helfen?
Hier der code:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
import java.awt.Color; import java.awt.FlowLayout; import javax.swing.BorderFactory; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.Popup; import javax.swing.PopupFactory; import javax.swing.UIManager; public class Beispiel5 { public Beispiel5() { try { UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); } catch (Exception e) { } JFrame frame = new JFrame("Beispiel 5"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(500, 300); JPanel panel = new JPanel(); panel.setLayout(new FlowLayout()); JLabel label = new JLabel("Datum"); JTextField field = new JTextField(30); PopupFactory factory = PopupFactory.getSharedInstance(); panel.add(label); panel.add(field); frame.add(panel); frame.setSize(350, 250); frame.setVisible(true); int x = field.getLocationOnScreen().x + field.getPreferredSize().width - 2; int y = field.getLocationOnScreen().y - field.getPreferredSize().height + 2; JPanel errorPanel = new JPanel(); JLabel errorLabel = new JLabel("Falsches Datum"); errorPanel.setBorder(BorderFactory.createLineBorder(Color.black)); errorPanel.add(errorLabel); Popup popup = factory.getPopup(frame, errorPanel, x, y); popup.show(); } public static void main(String[] args) { Beispiel5 beispiel = new Beispiel5(); } }
-
24.01.12 21:31 #2
- Registriert seit
- Jun 2009
- Beiträge
- 870
Warum verwendest du nicht gleich einen ToolTip?
Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.Code java:1
System.out.println("Hallo");
___________
Ubuntu Bug #1: Microsoft has a majority market share
Casecon: Projekt leiser Käse
-
Weil ich eine Fehlerausgabe für ein JTextField erzeugen will.
Aber ich bin drauf gekommen dass wenn das popup innerhalb des Frames gezeichnet wird, dann liegt es auf dem glass-pane und wird somit beim verschieben des Frames mitverschoben.
Liegt es nur ein wenig außerhalb, dann wird ein eigenständiges JWindow gemacht was dann natürlich stehen bleibt.
-
25.01.12 09:07 #4
Hi,
wenn du den Popup lieber auserhalb von deinem Fenster haben willst, musst du das "externe" JWindow mit setLocation relativ zum "Haupt"-Fenster ausrichten. Dann sollte das auch so funktionieren.
Gruß
FabioBitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]
Tutorials:
Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
JAnimationPanel - Animationen für Swing/AWT
SWTRatingBar (Bewertungs-Composite) selbst programmieren
____________________________________________________________________________
Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.
-
Aber wird es dann auch mit verschoben wenn man das Hauptfenster verschiebt?
(Kann es gerade nicht testen)
-
25.01.12 10:32 #6
Nachdem ich da ein wenig rumgespielt habe, funktioniert es jetzt.
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
import java.awt.Color; import java.awt.FlowLayout; import java.awt.Window; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.event.WindowFocusListener; import java.awt.event.WindowStateListener; import javax.swing.BorderFactory; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.Popup; import javax.swing.PopupFactory; import javax.swing.UIManager; public class Beispiel5 { public Beispiel5() { try { UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); } catch(final Exception e) { } final JFrame frame = new JFrame("Beispiel 5"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(500, 300); final JPanel panel = new JPanel(); panel.setLayout(new FlowLayout()); final JLabel label = new JLabel("Datum"); final JTextField field = new JTextField(30); final PopupFactory factory = PopupFactory.getSharedInstance(); panel.add(label); panel.add(field); frame.add(panel); frame.setSize(350, 250); frame.setVisible(true); final int x = field.getLocationOnScreen().x + field.getPreferredSize().width - 2; final int y = field.getLocationOnScreen().y - field.getPreferredSize().height + 2; final JPanel errorPanel = new JPanel(); final JLabel errorLabel = new JLabel("Falsches Datum"); errorPanel.setBorder(BorderFactory.createLineBorder(Color.black)); errorPanel.add(errorLabel); final Popup popup = factory.getPopup(frame, errorPanel, x, y); popup.show(); frame.addComponentListener(new ComponentAdapter() { @Override public void componentResized(final ComponentEvent e) { final Window currentPopup = findCurrentPopup(); if(currentPopup != null) { final int x = field.getLocationOnScreen().x + field.getPreferredSize().width - 2; final int y = field.getLocationOnScreen().y - field.getPreferredSize().height + 2; currentPopup.setLocation(x, y); } } @Override public void componentMoved(final ComponentEvent e) { final Window currentPopup = findCurrentPopup(); if(currentPopup != null) { final int x = field.getLocationOnScreen().x + field.getPreferredSize().width - 2; final int y = field.getLocationOnScreen().y - field.getPreferredSize().height + 2; currentPopup.setLocation(x, y); } } }); frame.addWindowListener(new WindowAdapter() { @Override public void windowClosing(final WindowEvent e) { final Window currentPopup = findCurrentPopup(); if(currentPopup != null) { currentPopup.dispose(); } } }); frame.addWindowStateListener(new WindowStateListener() { @Override public void windowStateChanged(final WindowEvent e) { final Window currentPopup = findCurrentPopup(); if(currentPopup != null) { currentPopup.setVisible(e.getWindow().isVisible()); } } }); frame.addWindowFocusListener(new WindowFocusListener() { @Override public void windowLostFocus(final WindowEvent e) { final Window currentPopup = findCurrentPopup(); if(currentPopup != null) { currentPopup.setVisible(false); } } @Override public void windowGainedFocus(final WindowEvent e) { final Window currentPopup = findCurrentPopup(); if(currentPopup != null) { currentPopup.setVisible(true); } } }); } /** * {@link javax.swing.Popup.HeavyWeightWindow#HeavyWeightWindow(Window)} * * @return */ public static Window findCurrentPopup() { final Window[] windows = JFrame.getWindows(); for(final Window window : windows) { // Der Name steht in der Klasse, die im Kommentar als Link markiert ist if(window.getName().equals("###overrideRedirect###")) { return window; } } return null; } public static void main(final String[] args) { new Beispiel5(); } }
Gruß
FabioBitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]
Tutorials:
Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
JAnimationPanel - Animationen für Swing/AWT
SWTRatingBar (Bewertungs-Composite) selbst programmieren
____________________________________________________________________________
Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.
-
Danke, das ist einmal ein Ansatz

Was ich noch nicht ganz verstehe...woher bekomme ich den Window-Name des Popups?
Wenn ich deinen Code einfach ausführe, funktioniert es noch nicht.
Ich muss erst bei
Code java:1
if(window.getName().equals("###overrideRedirect###")) {
win0 eintragen.
-
25.01.12 12:23 #8
Der name wird in der Java-Library eingetragen. Die Klasse befindet sich innerhalb der Popup Klasse.
Im Konstruktor wird der Name des Fensters gesetzt. Ich war eigentlich der Meinung, dass der Name überall gleich sein müsste, da er schließlich in der Java-Library fest verankert ist.Code java:1
javax.swing.Popup.HeavyWeightWindow
Bitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]
Tutorials:
Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
JAnimationPanel - Animationen für Swing/AWT
SWTRatingBar (Bewertungs-Composite) selbst programmieren
____________________________________________________________________________
Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.
Ähnliche Themen
-
URLs in Anchor umwandeln
Von ropueh im Forum PHPAntworten: 4Letzter Beitrag: 24.02.11, 17:05 -
[SEO] - Ajax Anchor Navigation
Von Primus852 im Forum Javascript & AjaxAntworten: 10Letzter Beitrag: 09.01.11, 18:56 -
Anchor Text und Backlinks
Von jimboo im Forum .NET Web und KommunikationAntworten: 2Letzter Beitrag: 17.05.07, 15:17 -
JFrame sperren oder neuen JFrame modal darstellen
Von Scrapy im Forum JavaAntworten: 2Letzter Beitrag: 07.09.05, 12:16 -
include mit anchor
Von jenno im Forum PHPAntworten: 4Letzter Beitrag: 18.05.05, 09:25





Zitieren
Login





