Problema com posicionamento (location) de um JComponent

0 respostas
A

Encontrei um pequeno framework pra validacao no swingo (http://www.javalobby.org/java/forums/t20551.html) e fiz uma pequena alteração, para que em lugar de utilizar um JDialog para exibir a mensagem de validação, utilizaae um JPanel, colocado na POPUP_LAYER do JDialog ou JFrame que contém o componente sendo validado. Isso porque quando um JDialog é usado, caso a janela seja movido, a mensahgem de validação não se move junto.

O problema que estou tendo é pra posicionar a mensagem de validação. eu gostaria que ela ficasse posicionada logo abaixo do componente, a esquerda, como mostra na Figura2 anexa. Mas o que está ocorrendo é que a mensagem está ficando sobre o componente sendo validado, como mostra a figura 1.

Alguém sabe como resolver isto?

Segue o código que estou utilizando pra posicionar o JPanel (com a mensagem de validacao) proximo ao componente (ex: jtextfield) sendo validao. Este código está gerando o resultado da figura 1.

/**
 * c componente sendo validado
 */
private void initComponents(JComponent c) {
        JLayeredPane layeredPane;
        if (parent instanceof JFrame) {
            layeredPane = ((JFrame)parent).getLayeredPane();
        } else if (parent instanceof JDialog) {
            layeredPane = ((JDialog)parent).getLayeredPane();
        } else {
            throw new IllegalArgumentException();
        }
        
        popup = new JPanel();
        layeredPane.add(popup);
        layeredPane.setLayer(popup,JLayeredPane.POPUP_LAYER);
        
        popup.setLayout(new FlowLayout());
        popup.setBackground(popupBackgroundColor);
        popup.setFocusable(false);
        popup.setVisible(false);
        popup.add(image);
        popup.add(messageLabel);
        
        point = c.getLocation();
        int locationX = point.x;
        int locationY = point.y;
        Container container = c.getParent();
        Container topContainer = c.getRootPane();
        while (!container.equals(topContainer)) {
            point = container.getLocation();
            locationX += point.x;
            locationY += point.y;
            container = container.getParent();
        }
        cDim = c.getSize();
        
        popup.setLocation(locationX, locationY + (int) cDim.getHeight());
    }

Valeu!



Criado 24 de abril de 2008
Respostas 0
Participantes 1