[英]Adding an ActionListener to a custom component
I have a custom component (which extends JPanel
). 我有一个自定义组件(
extends JPanel
)。
It looks something like this: 看起来像这样:
My question is: When I use it in another JFrame
, how do i add an ActionListener
to it, so that when I click any of the button it'll execute code in the actionPerformed
? 我的问题是:当我在另一个
JFrame
使用它时,如何向其中添加ActionListener
,以便当我单击任何按钮时,它将在actionPerformed
执行代码?
I tried adding a MouseListener
to it, but it didn't work. 我尝试向其中添加一个
MouseListener
,但是没有用。
EDIT: I'm sorry I'm not very clear on the component: It consist of two JButtons
(the "-" and "+") and a JTextField
. 编辑:对不起,我在组件上不是很清楚:它由两个
JButtons
(“-”和“ +”)和一个JTextField
。 When the user clicks on either of them, the number in the middle increases or decreases. 当用户单击其中任何一个时,中间的数字将增加或减少。 All these 3 components are placed inside a
JPanel
. 所有这三个组件都放置在
JPanel
。
EDIT 2: Here is the source code: 编辑2:这是源代码:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.border.EtchedBorder;
@SuppressWarnings("serial")
public class ZoomSelector extends JPanel {
protected JButton btnDecrement;
protected JTextField txtNumber;
protected JButton btnIncrement;
private String currentValue, previousValue;
public ZoomSelector() {
setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null));
initGUI();
txtNumber.setText("12");
currentValue = "12";
setSize(new Dimension(125, 26));
validate();
}
public boolean hasChanged() {
if(currentValue.equals(previousValue)) {
return true;
}
else {
return false;
}
}
public String getText() {
return txtNumber.getText();
}
public void reset() {
previousValue = txtNumber.getText();
txtNumber.setText("12");
currentValue = "12";
}
@Override
public void setEnabled(boolean e) {
btnDecrement.setEnabled(e);
txtNumber.setEnabled(e);
btnIncrement.setEnabled(e);
}
public void increment() {
previousValue = txtNumber.getText();
int number = Integer.parseInt(txtNumber.getText());
if(number < 20) {
number++;
txtNumber.setText("" + number);
currentValue = "" + number;
}
}
public void decrement() {
previousValue = txtNumber.getText();
int number = Integer.parseInt(txtNumber.getText());
if(number > 0) {
number--;
txtNumber.setText("" + number);
currentValue = "" + number;
}
}
private void initGUI() {
btnDecrement = new JButton("-");
btnDecrement.setFont(new Font("Tahoma", Font.BOLD, 14));
btnDecrement.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
decrement();
}
});
setLayout(new BorderLayout(0, 0));
add(btnDecrement, BorderLayout.WEST);
txtNumber = new JTextField();
txtNumber.setHorizontalAlignment(SwingConstants.CENTER);
txtNumber.setText("0");
txtNumber.setEditable(false);
add(txtNumber, BorderLayout.CENTER);
txtNumber.setColumns(2);
btnIncrement = new JButton("+");
btnIncrement.setFont(new Font("Tahoma", Font.BOLD, 14));
btnIncrement.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
increment();
}
});
add(btnIncrement, BorderLayout.EAST);
}
}
Just use JSpinner. 只需使用JSpinner。 It is an easy way to move a value up or down.
这是向上或向下移动值的简单方法。 EXAMPLE BY Java tutorials: http://docs.oracle.com/javase/tutorialJWS/uiswing/components/ex6/SliderDemo.jnlp
Java范例范例: http : //docs.oracle.com/javase/tutorialJWS/uiswing/components/ex6/SliderDemo.jnlp
I added an action listener to a custom Swing component here: JCropFrame 我在这里向自定义的Swing组件添加了一个动作监听器: JCropFrame
You have to create your own EventListener
and extend AWTEvent
and AWTEventMulticaster
您必须创建自己的
EventListener
并扩展AWTEvent
和AWTEventMulticaster
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.