如何添加ActionListener来自定义组件 [英] How to add ActionListener to customize component
本文介绍了如何添加ActionListener来自定义组件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我创建了一个组件,并想添加 ActionListener
来自定义组件。
我想创建一个类似于的组件JButton
并在 Events
设计视图对话框中显示 actionPerformed
事件。
JBaseComponent
类将从 JComponent
派生。
代码:
公共类JCButton扩展了JBaseComponent实现ActionListener, ItemSelectable,ChangeListener {
private JButton _button = new JButton();
private ActionEvent _actevent = new ActionEvent(this,ActionEvent.ACTION_PERFORMED,);
public JCButton(){
super();
_button.setPreferredSize(new Dimension(105,25));
_button.setFocusTraversalKeysEnabled(false);
_button.addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent e){
JComponent c =(JComponent)e.getSource();
TransferHandler handler = c.getTransferHandler();
handler.exportAsDrag(c,e,TransferHandler.COPY);
}
});
_button.setTransferHandler(new TransferHandler( btn));
setColorFocus(false);
_button.addActionListener(this);
actionPerformed(_actevent);
addActionListener(this);
revalidate();
repaint();
add(_button);
}
public void setText(String txt){
_button.setText(txt);
}
public void setIcon(Icon ico){
_button.setIcon(ico);
}
public void addActionListener(ActionListener act){
_button.addActionListener(act);
}
@Override
public void actionPerformed(ActionEvent e){
}
@Override
public Object [] getSelectedObjects(){
返回null;
}
@Override
public void addItemListener(ItemListener l){
}
@Override
public void removeItemListener(ItemListener l){
}
@Override
public void stateChanged(ChangeEvent e){
}
}
解决方案
如果您真的是不能为此使用 JButton
,您的下一个最佳选择是扩展 AbstractButton
,其中包括 EventListenerList
在
导入java.awt.EventQueue;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.AbstractButton;
import javax.swing.Action;
import javax.swing.DefaultButtonModel;
import javax.swing.JFrame;
import javax.swing.UIManager;
import javax.swing.plaf.ButtonUI;
/ ** @see https://stackoverflow.com/a/14429304/230513 * /
公共类JCButtonTest {
private void display(){
JFrame f = new JFrame( JCButtonTest);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new JCButton(new AbstractAction( JCButton)){
@Override
public void actionPerformed(ActionEvent e){
System.out.println (e);
}
}));
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
私有静态类JCButton扩展了AbstractButton {
public static final int SIZE = 32;
public JCButton(Action action){
this.setModel(new DefaultButtonModel());
System.out.println(action.getValue(Action.NAME));
this.init((String)action.getValue(Action.NAME),null);
this.addActionListener(action);
}
@Override
public void updateUI(){
setUI((ButtonUI)UIManager.getUI(this));
}
@Override
public String getUIClassID(){
return ButtonUI;
}
}
public static void main(String [] args){
EventQueue.invokeLater(new Runnable(){
@Override
public void run(){
new JCButtonTest()。display();
}
});
}
}
I created a component and want to add ActionListener
to customize component.
I want to create a component like JButton
and show actionPerformed
event in Events
Dialog on design view.
JBaseComponent
class will be derived from JComponent
.
Code:
public class JCButton extends JBaseComponent implements ActionListener,ItemSelectable,ChangeListener{
private JButton _button=new JButton();
private ActionEvent _actevent=new ActionEvent(this,ActionEvent.ACTION_PERFORMED,"");
public JCButton() {
super();
_button.setPreferredSize(new Dimension(105, 25));
_button.setFocusTraversalKeysEnabled(false);
_button.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
JComponent c = (JComponent) e.getSource();
TransferHandler handler = c.getTransferHandler();
handler.exportAsDrag(c, e, TransferHandler.COPY);
}
});
_button.setTransferHandler(new TransferHandler("btn"));
setColorFocus(false);
_button.addActionListener(this);
actionPerformed(_actevent);
addActionListener(this);
revalidate();
repaint();
add(_button);
}
public void setText(String txt){
_button.setText(txt);
}
public void setIcon(Icon ico){
_button.setIcon(ico);
}
public void addActionListener(ActionListener act){
_button.addActionListener(act);
}
@Override
public void actionPerformed(ActionEvent e) {
}
@Override
public Object[] getSelectedObjects() {
return null;
}
@Override
public void addItemListener(ItemListener l) {
}
@Override
public void removeItemListener(ItemListener l) {
}
@Override
public void stateChanged(ChangeEvent e) {
}
}
解决方案
If you really can't use a JButton
for this, your next best option is extending AbstractButton
, which includes the EventListenerList
plumbing mentioned here. For example,
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.AbstractButton;
import javax.swing.Action;
import javax.swing.DefaultButtonModel;
import javax.swing.JFrame;
import javax.swing.UIManager;
import javax.swing.plaf.ButtonUI;
/** @see https://stackoverflow.com/a/14429304/230513 */
public class JCButtonTest {
private void display() {
JFrame f = new JFrame("JCButtonTest");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new JCButton(new AbstractAction("JCButton") {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println(e);
}
}));
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
private static class JCButton extends AbstractButton {
public static final int SIZE = 32;
public JCButton(Action action) {
this.setModel(new DefaultButtonModel());
System.out.println(action.getValue(Action.NAME));
this.init((String) action.getValue(Action.NAME), null);
this.addActionListener(action);
}
@Override
public void updateUI() {
setUI((ButtonUI) UIManager.getUI(this));
}
@Override
public String getUIClassID() {
return "ButtonUI";
}
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new JCButtonTest().display();
}
});
}
}
这篇关于如何添加ActionListener来自定义组件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文