創建代碼:
private void addToggleButton(JToolBar jtoolbar, Element tool) {
JToggleButton togBtn = new JToggleButton();
togBtn.setName(tool.attributeValue(Widgets.key_tool_attr_name));
togBtn.setText(tool.attributeValue(Widgets.key_tool_attr_text));
togBtn.setActionCommand(tool.attributeValue(Widgets.key_tool_attr_cmd));
// togBtn.setIcon(new ImageIcon(tool.attributeValue(Widgets.key_tool_attr_icon)));
int w = Integer.parseInt(tool.attributeValue(Widgets.key_tool_attr_width));
int h = Integer.parseInt(tool.attributeValue(Widgets.key_tool_attr_height));
Dimension size = new Dimension(w, h);
togBtn.setSize(size);
togBtn.setPreferredSize(size);
togBtn.setBackground(RdrmColor.parseToColor(tool.attributeValue(Widgets.key_tool_attr_bcolor)));
togBtn.setForeground(RdrmColor.parseToColor(tool.attributeValue(Widgets.key_tool_attr_fcolor)));
boolean enabled = !"false".equals(tool.attributeValue(Widgets.key_tool_attr_enabled)) ? true : false;
togBtn.setEnabled(enabled);
togBtn.setBorder(null);
// JToggleButton用哪種監聽器
togBtn.addChangeListener(changelistener);
jtoolbar.add(togBtn);
}
監聽器代碼:
public void createActionListener() {
applistener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
requestExecute(e);
}
};
changelistener = new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
JToggleButton toggleBtn = (JToggleButton) e.getSource();
System.out.println(toggleBtn.getText() + " 是否選中: " + toggleBtn.isSelected());
// setMute(jtb.isSelected());
// System.out.println(isMute);
}
};
itemListener = new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
// 當JRadioButton被選中時,改變變數engine_selected的值
JRadioButton rBtn = (JRadioButton) e.getSource();
engine_selected = rBtn.getName().trim();
switch (engine_selected) {
case engine_selected_checktext:
System.out.println(((JRadioButton)e.getSource()).getActionCommand());
break;
case engine_selected_offline:
System.out.println(((JRadioButton)e.getSource()).getActionCommand());
break;
case engine_selected_online:
System.out.println(((JRadioButton)e.getSource()).getActionCommand());
break;
case engine_selected_websocket:
System.out.println(((JRadioButton)e.getSource()).getActionCommand());
break;
}
}
}
};
}
執行情況,在滑鼠經過、點擊、離開時觸發了7次:

我只想在滑鼠狀態完成時觸發一次,怎么辦?
uj5u.com熱心網友回復:
其實,要在 JTogelButton 選中/取消選中時觸發某個事件,大部分情況下用 ActionListener 就足夠了,無論是滑鼠點擊還是按空格改變了按鈕狀態,都會觸發
只有極少數情況,比如你還有別的地方會通過代碼直接呼叫 setSelected(true/false) 改變按鈕狀態,
那種情況下才在按鈕狀態發生變化時,不會觸發ActionListener
如果有這樣的需求的話,可以用 ItemListener 而不是 ChangeListeter
ChangeListeter 確實不是一個很友好的事件監聽器,很少會去用它
btn.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
int stateChange = e.getStateChange();
if (stateChange == ItemEvent.SELECTED) {//選中時
System.out.println(true);
} else if (stateChange == ItemEvent.DESELECTED) {//取消選中時
System.out.println(false);
}
}
});
uj5u.com熱心網友回復:
我也感覺這個是監聽器的問題,查了下原始碼,只有一個方法,通過ChangeEvent e能判斷的事情很少了
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/265735.html
標籤:Java SE
上一篇:設備鎖定,跪求求大佬幫忙。
下一篇:在WAS7上部署應用問題