JRadio кнопка с информационной ссылкой - PullRequest
0 голосов
/ 11 марта 2010

Я хочу иметь набор JRadioButtons и рядом с каждым маленькое изображение «i», при нажатии которого открывается новое окно с информацией о тексте рядом с переключателем. Какой компонент лучше всего использовать для выравнивания маленькой надписи «i» рядом с кнопкой «Радио»?

Ответы [ 3 ]

1 голос
/ 11 марта 2010

Есть несколько возможностей сделать это со стилем.

Самым простым является, очевидно, поместить JButton с изображением "i" рядом с вашей радио-кнопкой. Использование правильного менеджера компоновки (GridBagLayout конечно) позволит вам легко выровнять оба.

Другим может быть установка свойства клиента в вашем переключателе, а затем пусть средство визуализации переключателей (в look'n'feel) использует это свойство клиента для отображения значка «i» рядом с вашей кнопкой. К сожалению, это немного сложнее верхнего орудия, поскольку требует правильного управления границами переключателей для включения изображения, когда это требуется (что также достигается в LnF, но не так легко найти).

1 голос
/ 11 марта 2010

Передайте ваше изображение как javax.swing.ImageIcon в конструктор JRadioButton.Затем прослушайте щелчки мыши по кнопке и проверьте, находятся ли координаты указателя мыши в границах вашего изображения.

0 голосов
/ 11 марта 2010

Я нахожу что-то вроде JLabel наиболее полезным для типа компонента для части 'i' проблемы. JLabels, как и все компоненты, могут иметь добавленных слушателей мыши, и оттуда у вас есть необходимый доступ для запуска чего-либо, когда пользователь нажимает на него.

В приведенном ниже коде я использовал простой FlowLayout, который выглядит как логическая подгонка для обеспечения горизонтального выравнивания, если вы не хотите использовать GridBayLayout. В конечном итоге это будет зависеть от того, как вы настраиваете свой макет, но что-то вроде FlowLayout помогает в этих ситуациях.

Посмотрите на следующий код для примера:

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