我正在用Java创建一个计算器GUI应用程序。我已经实现了用鼠标按下按钮的计算器。我也想听听numpad Press的数字,但我不想在ActionListener中重新创建方法。
例如,当按下JButton时,我就是这样实现listenOne的。
class ListentoOne implements ActionListener{
public void actionPerformed(ActionEvent arg) {
if(floating)
aftDec+="1";
else if(!operanD)
ans=(ans*10)+1;
else
operand=(operand*10)+1;
screen.setText(output+="1");
}
}
在panel类的构造函数中,我以这种方式构造了JButton:
one=new JButton("1");
one.addActionListener(new ListentoOne());
查看计算器面板示例。
它展示了如何为所有按钮共享一个ActionListener。该示例还使用键绑定,以便您可以单击按钮或键入按钮上显示的数字来调用该操作。
for(ActionListener a: button.getActionListeners()) {
a.actionPerformed(yourActionEvent);
}
我会为此使用键绑定,而不是keylister
。当然,有多种方法可以通过键绑定实现这一点,但在我的示例中,我创建了一个新类,如果按1
,它只需在按钮上调用doClick()
。
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.KeyStroke;
public class Example {
public Example() {
JLabel label = new JLabel("0");
ShortCutButton button = new ShortCutButton("1", KeyStroke.getKeyStroke(KeyEvent.VK_1, 0));
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
label.setText(String.valueOf(Integer.parseInt(label.getText()) + 1));
}
});
JFrame frame = new JFrame();
frame.setLayout(new FlowLayout());
frame.add(button);
frame.add(label);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new Example();
}
});
}
public class ShortCutButton extends JButton {
public ShortCutButton(String text, KeyStroke keyStroke) {
setText(text);
getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(keyStroke, "42");
getActionMap().put("42", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent arg0) {
doClick();
}
});
}
}
}
我正在编写一个Java应用程序。我有多个按钮。每个按钮的代码完全相同,因此我只需要一个ActionListener。但是在这个ActionListener中,我需要为相应的按钮调用“setText()”。这可能吗?我将如何实现这一点? 我尝试了以下方法: 但这不起作用——它说“找不到符号”。 提前感谢;)
问题内容: 我有一个JButton,想捕获鼠标单击它。在JButton上使用ActionListener与使用MouseListener之间有什么实际和哲学上的区别? 问题答案: ActionListener用于处理按钮的逻辑单击。点击发生 当按下鼠标然后释放按钮时, 或使用该按钮的键盘快捷键时, 或当按钮具有焦点并按下空格键时, 或当按钮为默认按钮并按下Enter键时, 或以编程方式调用按钮的c
问题内容: 我正在使用MVC创建一个基本的计算器。到目前为止,我正在改编一个教程,该教程仅将两个用户输入的值加在一起。 目前,我要添加到视图中的每个按钮都有其自己的侦听器,可以。但是,根据教程的控制器每个按钮只有一个ActionListener内部类。这重复了大量代码。 如何为所有按下的按钮创建一个ActionListener类,并在按下的按钮的ID上使用case语句? 在视图中注册oneButt
问题内容: 如何将动作侦听器添加到这些按钮,以便可以从主要方法调用actionperformed它们,因此单击它们时可以在程序中调用它们? 问题答案: 两种方式: 1.在你的类中实现,然后使用; 稍后,你必须定义一个方法。但是,对多个按钮执行此操作可能会造成混淆,因为该方法将必须检查每个事件()的来源以查看其来自哪个按钮。 2.使用匿名内部类: 稍后,你必须定义。当你有多个按钮时,这样做效果更好,
我正在使用JFrame Gui,还没有找到使用事件处理程序actionlistener更改JLabel背景的方法。主要的问题是我创建了一个JPanel,里面有4个JLabel。我不确定为什么不能使用JPanel容器中的JLabel变量。我已经尝试为JLabel创建一个字段,但是当我尝试使用该字段时,它返回null。getBackground()方法。我还尝试使用for循环获取JPanel的组件,并
我的JButton ActionListener有问题。我在另一个类中定义了一个doTheCleaning()方法,当调用该方法时,会对GUI进行一系列更改。 然后,在另一个类中,我实例化了包含doTheCleaning()方法的类,并用jbutton的actionperformed()方法编写了ActionListener,如下所示: 我知道如何执行其他操作,比如addActionListene