我在构建像应用程序这样有投票按钮的论坛时陷入困境。
我为每个自动生成的内容投票并投票。我希望此按钮仅显示向上和向下箭头,但不显示任何文本或标签..如何找出按下哪个按钮?
自动内容..
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
}
如上所述,我有多个由b函数创建的vote_up和vote_down按钮,如何区分哪个crt_cnt是按钮?
答案 0 :(得分: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 (...) {
//...
}
}
};
充分利用Action
API并为每个按钮制作单独的,自包含的操作......
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了解更多详情
答案 1 :(得分: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
}
}
};
答案 2 :(得分: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而不是文本。
答案 3 :(得分:0)
vote.setText("+"+thistopic.content.get(crt_cnt).get_id());
vote.setFont(heading.getFont().deriveFont(0.0f));
之后我可以通过与
比较来轻松追踪按下的按钮actionEvent.getActionCommand()
返回按钮上的文字!