[英]JSF 2: Create a custom component with CommandButton and get attribute to ActionListener
[英]Adding an ActionListener to a custom component
我有一個自定義組件( extends JPanel
)。
看起來像這樣:
我的問題是:當我在另一個JFrame
使用它時,如何向其中添加ActionListener
,以便當我單擊任何按鈕時,它將在actionPerformed
執行代碼?
我嘗試向其中添加一個MouseListener
,但是沒有用。
編輯:對不起,我在組件上不是很清楚:它由兩個JButtons
(“-”和“ +”)和一個JTextField
。 當用戶單擊其中任何一個時,中間的數字將增加或減少。 所有這三個組件都放置在JPanel
。
編輯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);
}
}
只需使用JSpinner。 這是向上或向下移動值的簡單方法。 Java范例范例: http : //docs.oracle.com/javase/tutorialJWS/uiswing/components/ex6/SliderDemo.jnlp
我在這里向自定義的Swing組件添加了一個動作監聽器: JCropFrame
您必須創建自己的EventListener
並擴展AWTEvent
和AWTEventMulticaster
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.