2015-09-15 3 views
0

Я застреваю при создании форума, такого как приложение, у которого есть кнопка голосования.Java, как назначить идентификатор кнопке и получить их?

Я проголосовал и проголосую за кнопку для каждого контента, который автоматически генерируется. Я хочу, чтобы эта кнопка отображала только стрелки вверх и вниз, но не текст или метку. Как я могу узнать, какая кнопка нажата?

Автоматизированное содержание ..

ImageIcon upvote = new ImageIcon(getClass().getResource("vote_up.png")); 
ImageIcon downvote = new ImageIcon(getClass().getResource("vote_down.png")); 
JButton vote_up = new JButton(upvote); 
JButton vote_down = new JButton(downvote); 
vote_up.addActionListener(voting); 
vote_down.addActionListener(voting); 

Action voting = new AbstractAction(){ 
    @Override 
    public void actionPerformed(ActionEvent e){ 
     //What to do here to find out which button is pressed? 
    } 
}; 

любая помощь приветствуется.

public void a(){ 
    int crt_cnt = 0; 
    for(ClassA temp : listofClassA) 
    {      
     b(crt_cnt); 
     crt_cnt++; 
    } 

} 
public void b(crt_cnt){ 
    //draw button 
} 

Как сверху, у меня есть несколько vote_up и кнопка vote_down, созданная с помощью функции Ь, как я могу отличить, который crt_cnt кнопка с?

+0

Метод 'getSource()' вернет вам исходный объект – AndrewMcCoist

+0

@KentOng Где вы храните свой crt_cnt? Отделяется от кнопок? – user3437460

ответ

0

эй спасибо за помощь и помощь! Я, наконец, понял!Я решил ее назначая текст на кнопке, +/- для голосования вверх или вниз, а затем идентификатор контента, который я требуется, затем изменить размер шрифта до 0

vote.setText("+"+thistopic.content.get(crt_cnt).get_id()); 
vote.setFont(heading.getFont().deriveFont(0.0f)); 

после того, что я мог легко проследить которая нажата по сравнению с

actionEvent.getActionCommand() 

, которые возвращают текст на кнопке!

1

Вы можете обнаружить с помощью метода getSource() вашей EventAction

Action voting = new AbstractAction(){ 
    @Override 
    public void actionPerformed(ActionEvent e){ 
     if (e.getSource() == vote_up) { 
      // vote up clicked 
     } else if (e.getSource() == vote_down){ 
      // vote down clicked 
     } 
    } 
}; 
3

Есть несколько способов, вы можете достичь этого

Вы могли бы ...

Просто используйте source из ActionEvent

Action voting = new AbstractAction(){ 
    @Override 
    public void actionPerformed(ActionEvent e){ 
     if (e.getSource() == vote_up) { 
      //... 
     } else if (...) { 
      //... 
     } 
    } 
}; 

Это может быть хорошо, если у вас есть ссылки на оригинальные кнопки

Вы могли бы ...

Назначить actionCommand каждой кнопке

JButton vote_up = new JButton(upvote); 
vote_up.setActionCommand("vote.up"); 
JButton vote_down = new JButton(downvote); 
vote_down .setActionCommand("vote.down"); 
//... 
Action voting = new AbstractAction(){ 
    @Override 
    public void actionPerformed(ActionEvent e){ 
     if ("vote.up".equals(e.getActionCommand())) { 
      //... 
     } else if (...) { 
      //... 
     } 
    } 
}; 

Вы могли бы ...

Тейк полное преимущество API Action и сделать индивидуальные автономные действия для каждой кнопки ...

public class VoteUpAction extends AbstractAction { 

    public VoteUpAction() { 
     putValue(SMALL_ICON, new ImageIcon(getClass().getResource("vote_up.png"))); 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     // Specific action for up vote 
    } 

} 

Тогда вы могли бы просто использовать

JButton vote_up = new JButton(new VoteUpAction()); 
//... 

, который конфигурирует кнопку в соответствии со свойствами Action и запустит его actionPerformed метод, когда кнопка срабатывает. Таким образом, вы знаете 100%, что вам нужно/нужно делать, когда вызывается метод actionPerformed без каких-либо сомнений.

поближе посмотреть на How to Use Actions для получения более подробной информации

+0

Вы получили решение очень быстро! – user3437460

+0

@ user3437460 Я могу скопировать и вставить довольно хорошо;) – MadProgrammer

+0

эй спасибо за ответ, однако у меня есть много голосов_up и vote_down, каждый crt_cnt (текущий контент) имеет один из каждого, как я могу определить, какие crt_cnt эти кнопки принадлежат ? спасибо за помощь! –

0

я бы обернуть JButton похожее на это:

JButton createMyButton(final JPanel panel, final String text, 
     final boolean upOrDown, final int gridx, final int gridy) { 
     final JButton button = new JButton(); 
     button.setPreferredSize(new Dimension(80, 50)); 
     final GridBagConstraints gbc = Factories.createGridBagConstraints(gridx, 
      gridy); 
     panel.add(button, gbc); 
     button.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(final ActionEvent e) { 
      myActionPerformed(text, upOrDown); 
     } 
    }); 
    return button; 
} 

Вы могли бы использовать Int вместо текста, если более удобно.

Смежные вопросы