Frage

Ich habe eine JTable innerhalb eines JScrollPane. Ich bin eine benutzerdefinierte Zelleneditor für eine der Spalten der Tabelle erstellen, und ich mag dieser Editor ein Scrollen JList aufzutauchen. Ich habe dies getan, indem ein Popup mit einem neuen JScrollPane die JList enthält, zeigen.

Alles funktioniert, mit Ausnahme der Position der Popup. Meine benutzerdefinierte Komponente für den Editor sieht grundsätzlich wie folgt:

public class CustomPanel extends JPanel {
    JTextField text = new JTextField();
    JList list = new JList();
    JScrollPane scroll = new JScrollPane(list);
    Component owner = null;
    public CustomPanel(Component owner) {
        this.owner = owner;
        add(text);
    }
    public void showPopup() {
        Popup p = PopupFactory.getPopup(owner, scroll, getX(), getY()+getHeight());
        p.show();
    }
}

Was passiert ist, dass getX() und getY() kehren die Position der Tabellenzelle in Bezug auf die JScrollPane es halten, und Popup ist absolute Bildschirmposition zu wollen. Selbst wenn ich die owner in JScrollPane übergeben, die sie relativ sind, funktioniert es nicht. Ich erhalte das gleiche Problem, wenn ich text.getX() / text.getY() verwenden.

Wie kann ich meine Popup direkt unter dem TextBox positionieren?

Nur ein bisschen mehr Hintergrund: Das Endziel ist eine Mehrfachauswahl Combobox, die alle der ausgewählten Elemente als durch Kommata getrennte Liste anzeigt. Wenn etwas anderes wie diese bereits vorhanden ist, zögern Sie bitte nicht, mich auf ihn zu verweisen.

Edit: owner.getLocationOnScreen().y + getY() funktioniert nicht, wenn die Bildlauffenster überall ist aber gescrollt den ganzen Weg nach oben. Doch einfach nur getLocationOnScreen().y funktioniert. Problem gelöst, danke.

War es hilfreich?

Lösung

Sie können die absoluten Bildschirmposition Abfrage mit Component.getLocationOnScreen() . Ist das, was Sie suchen?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top