Pergunta

Eu tenho um dentro JTable de um JScrollPane. Estou criando um editor de célula personalizado para uma das colunas da tabela, e eu quero este editor para abrir uma JList rolagem. Eu fiz isso usando um Popup para mostrar uma nova JScrollPane contendo o JList.

Tudo está funcionando, exceto para a posição do Popup. Meu componente personalizado para o editor parece basicamente assim:

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();
    }
}

O que está acontecendo é que getX() e getY() estão retornando a posição da célula da tabela em relação ao JScrollPane segurá-lo, e Popup está querendo posição da tela absoluto. Mesmo se eu passar em owner o JScrollPane que eles são em relação ao, ele não funciona. Recebo o mesmo problema se eu usar text.getX() / text.getY().

Como posso posicionar meu Popup diretamente abaixo do TextBox?

Apenas um pouco mais fundo: O objetivo final é um combobox de seleção múltipla que exibe todos os itens selecionados como uma lista separada por vírgulas. Se alguma coisa como esta já existe, por favor, não hesite em me apontar para ele.

Edit: owner.getLocationOnScreen().y + getY() não funciona quando o painel de rolagem é em qualquer lugar, mas rolado todo o caminho até. No entanto, apenas getLocationOnScreen().y simples funciona. Problema resolvido, obrigado.

Foi útil?

Solução

Você pode consultar a posição da tela absoluta com Component.getLocationOnScreen() . É isso que você está procurando?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top