Фоновое изображение JButton

Привет, я пытаюсь реализовать прослушиватель действий для JButton, и код выглядит следующим образом:

ImageIcon imageForOne = new ImageIcon(getClass().getResource("resources//one.png"));
one = new JButton("",imageForOne);
one.setPreferredSize( new Dimension(78, 76));
one.addActionListener(myButtonHandler);

Использование вышеуказанного JButton выглядит нормальноПосмотрите на изображение ниже для кнопки 1

Когда я добавляю определенное значение к кнопке, например.

ImageIcon imageForOne = new ImageIcon(getClass().getResource("resources//one.png"));
//Check this
one = new JButton("one",imageForOne);
one.setPreferredSize( new Dimension(78, 76));
one.addActionListener(myButtonHandler);

Это выглядит как следующее изображение

Проверить кнопку 1

Есть ли способ избежать этого и установить значение тоже.

Заранее благодарны за Вашу помощь.


person usrNotFound    schedule 14.06.2013    source источник
comment
Зачем вы хотите установить метку, если вы все равно не хотите ее отображать? (Боюсь, вы хотите обрабатывать щелчок на основе имени кнопки, но это не тот путь.)   -  person Vincent van der Weele    schedule 14.06.2013
comment
@Heuster, я хочу получить это значение и использовать его в прослушивателе действий. У меня тоже есть другой код для прослушивателя действий, если хотите, я тоже могу его опубликовать. Спасибо   -  person usrNotFound    schedule 14.06.2013
comment
Я согласен с Хьюстером. Вместо того, чтобы использовать текст метки JButton для изменения действия, создайте собственный ActionListener для каждой кнопки и внедрите значение, относящееся к кнопке, в ActionListener. Текст метки предназначен для графического отображения и не предназначен для использования в качестве дескриптора объекта.   -  person Bobulous    schedule 14.06.2013


Ответы (3)


Лично я бы использовал ActionAPI.

Это позволит вам определить иерархию команд действий (если это то, что вы хотите), а также определить автономный ответ на команды.

Ты мог бы...

public class OneAction extends AbstractAction {
    public OneAction() {
        ImageIcon imageForOne = new ImageIcon(getClass().getResource("resources//one.png"));
        putValue(LARGE_ICON_KEY, imageForOne);
    }

    public void actionPerfomed(ActionEvent evt) {
        // Action for button 1
    }
}

Тогда вы просто использовали бы свою кнопку...

one = new JButton(new OneAction());
one.setPreferredSize( new Dimension(78, 76));

Например...

person MadProgrammer    schedule 15.06.2013

Вместо определения кнопки, нажатой в прослушивателе действий, я бы использовал шаблон адаптера:

one.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent arg0) {
        handleClick("one");
    }        
});

где handleClick все еще может быть обработчиком всех ваших кнопок.

person Vincent van der Weele    schedule 14.06.2013

я хочу получить это значение и использовать его для прослушивателя действий.

Для этого вы используете команду действия:

one.setActionCommand("1");

Однако лучше использовать фактический текст, который вы хотите вставить в свой дисплейный компонент. Затем вы можете поделиться ActionListener со всеми кнопками, используя такой код:

ActionListener clicked = new ActionListener() 
{
    @Override
    public void actionPerformed(ActionEvent e) {
        String text = e.getActionCommand()
        // displayComponent.appendText(text);
    }        
};

one.addActionListener(clicked);
two.addActionListener(clicked);
person camickr    schedule 14.06.2013
comment
Спасибо, дружище, ты легенда. - person usrNotFound; 14.06.2013