Pergunta

Quero ter um conjunto de JRadiobuttons e ao lado de cada um um pouco de imagem 'I' que, quando clicado, abrirá uma nova janela com informações sobre o texto ao lado do botão de rádio. Qual é o melhor componente a ser usado para alinhar a pequena etiqueta 'i' ao lado do botão de rádio?

Foi útil?

Solução

Existem algumas possibilidades para fazer isso com estilo.

O mais simples é obviamente colocar um JButton com a imagem "I" ao lado do botão de rádio. Usando o gerenciador de layout certo (GridBagLayout Claro) permitirá que você se alinhe facilmente.

Outro pode ser definir uma propriedade do cliente no botão de rádio e deixar o renderizador do botão de rádio (no look'n'feel) usar esta propriedade cliente para exibir o ícone "i" ao lado do botão. Infelizmente, é um pouco mais difícil implementar, pois exige que você gerencie corretamente os limites do botão de rádio para inclusão da imagem quando necessário (que também é alcançado no LNF, mas não é fácil de encontrar).

Outras dicas

Passe sua imagem como um javax.swing.ImageIcon para o construtor do JRadioButton. Em seguida, ouça o mouse clica no botão e verifique se as coordenadas do ponteiro do mouse estão dentro dos limites da sua imagem.

Acho algo como um jlabel o mais útil para o tipo de componente para a parte 'i' do problema. JLABELS como todos os componentes podem ter ouvintes do mouse adicionados a eles e, a partir daí, você tem o acesso necessário para acionar algo quando o usuário clicar em um.

No código abaixo, usei um fluxo simples, pois parece um ajuste lógico para fornecer o alinhamento horizontal se você não gosta de usar um gridbaylayout. Por fim, dependerá de como você está configurando seu layout, mas algo como um FlowLayout ajuda nessas situações.

Veja o código a seguir para um exemplo:

public class Main {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable(){
            public void run() {
                final JFrame f = new JFrame();
                f.setLayout(new BorderLayout());
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                JPanel p = new JPanel(new FlowLayout());
                JLabel l = new JLabel(new ImageIcon(Main.class.getResource("info.png")));
                l.addMouseListener(new MouseAdapter(){
                    @Override
                    public void mouseReleased(MouseEvent e) {
                        JOptionPane.showMessageDialog(f, "Clicked");
                    }
                });
                p.add(new JRadioButton());
                p.add(l);

                f.add(p, BorderLayout.CENTER);
                f.pack();
                f.setLocationRelativeTo(null);
                f.setVisible(true);
            }
        });
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top