我还在学习如何在java中编码,我现在可以使用一些帮助。
这是我写的当前代码。如您所见,它是一个带有一堆按钮和滑块的简单面板。每当我按下不同的按钮时,我想制作一个不同的控制台输出。所以,如果我点击Back,它应该在控制台中写回。如果我在滑块上滚动一下,它应该在控制台中写入新值。类似的东西。我知道必须使用actionListener和actionPerformed完成,但经过一些实验后我无法使其工作。
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Gui implements ActionListener {
// Adding all the goods
JFrame frame;
JPanel panel;
JButton endButton;
JButton backButton;
JButton calcButton;
JSlider maxIterations;
JLabel view;
Gui() {
// General
this.frame = new JFrame("Trying my best, I swear");
this.frame.setSize(500, 500);
this.frame.setVisible(true);
this.panel = new JPanel();
// Buttons
this.backButton = new JButton("Back");
this.calcButton = new JButton("Calc");
this.endButton = new JButton("End");
this.panel.add(this.endButton);
this.panel.add(this.calcButton);
this.panel.add(this.backButton);
this.frame.add(this.panel);
// Label
JLabel label1 = new JLabel();
label1.setText("Space Holer");
panel.add(label1);
// Slider
JSlider slider = new JSlider(JSlider.HORIZONTAL, 0, 30, 15);
panel.add(slider);
slider.setMinorTickSpacing(2);
slider.setMajorTickSpacing(5);
slider.setPaintTicks(true);
slider.setPaintLabels(true);
// Make the buttons do something
this.endButton.addActionListener(this);
}
public void actionPerformed(ActionEvent ae) {
System.out.println("End");
}
public static void main(String[] args) {
@SuppressWarnings("unused")
Gui m = new Gui();
}
}
答案 0 :(得分:1)
利用按钮的actionCommand
属性,该属性在创建时设置为ActionEvent
。如果您自己没有为按钮提供actionCommand
,则会默认为text
值,因此您可以执行类似
public class ButtonActionHandler implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
switch (e.getActionCommand()) {
case "Back":
System.out.println("Back");
break;
case "Calc":
System.out.println("Calc");
break;
case "End":
System.out.println("End");
break;
}
}
}
如果ActionListener
位于定义按钮的类的外部,这是很好的,因为您无法访问按钮引用。它也很好,因为你可以有很多按钮(包括工具栏按钮和菜单项)做同样的事情
利用ActionListener
source
属性
public class ButtonActionHandler implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == backButton) {
System.out.println("Back");
} else if (e.getSource() == calcButton) {
System.out.println("Calc");
} else if (e.getSource() == endButton) {
System.out.println("End");
}
}
}
如果将ActionListener
定义为定义按钮的父类的内部类,这很有用
使用直接针对按钮注册的匿名类...
endButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("End");
}
});
按钮执行单个独立任务
的情况很好使用Action
API,它允许您定义一个独立的工作单元,按钮可以使用它来完全配置它。这在您可以从UI的不同位置执行的重复操作时非常有用,例如"打开文件"菜单栏,工具栏和一些向导中包含的操作。您甚至可以将它与密钥绑定API一起用于扩展功能
有关详细信息,请参阅How to use actions
答案 1 :(得分:0)
需要将ActionListener添加到所有按钮
calcButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("calcButton");
// calculation for slider.
}
});
backButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("backButton");
}
});
然后你得到不同的控制台输出。
答案 2 :(得分:0)
将所有组件放入jframe后,在jframe上调用setVisible
。
将ActionListener添加到每个按钮。将ChangeListener添加到滑块,因为它没有ActionListener。
查看完整代码:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
public class Gui implements ActionListener {
// Adding all the goods
JFrame frame;
JPanel panel;
JButton endButton;
JButton backButton;
JButton calcButton;
JSlider maxIterations;
JLabel view;
Gui() {
// General
this.frame = new JFrame("Trying my best, I swear");
this.frame.setSize(500, 500);
this.panel = new JPanel();
// Buttons
this.backButton = new JButton("Back");
this.calcButton = new JButton("Calc");
this.endButton = new JButton("End");
this.panel.add(this.endButton);
this.panel.add(this.calcButton);
this.panel.add(this.backButton);
this.frame.add(this.panel);
// Label
JLabel label1 = new JLabel();
label1.setText("Space Holer");
panel.add(label1);
// Slider
JSlider slider = new JSlider(JSlider.HORIZONTAL, 0, 30, 15);
panel.add(slider);
slider.setMinorTickSpacing(2);
slider.setMajorTickSpacing(5);
slider.setPaintTicks(true);
slider.setPaintLabels(true);
// Make the buttons do something
this.endButton.addActionListener(this);
this.backButton.addActionListener(this);
this.calcButton.addActionListener(this);
slider.addChangeListener(e -> {
Object source = e.getSource();
if (source instanceof JSlider) {
int value = ((JSlider) source).getValue();
System.out.println(value);
}
});
frame.pack();
this.frame.setVisible(true);
}
public void actionPerformed(ActionEvent ae) {
Object source = ae.getSource();
if (source instanceof JButton) {
String text = ((JButton) source).getText();
System.out.println(text);
}
}
public static void main(String[] args) {
@SuppressWarnings("unused")
Gui m = new Gui();
}
}