单击按钮添加新标签和文本字段 Java
Add new label and textfield on button click Java
我有这个带有三个按钮的代码。我想在单击按钮后添加标签和文本字段。所以对于 'button' 我想添加 'label' 和 'textfield.
对于 'button2' 我想添加 'label2' 和 'textfield2'。等等。
我已有此代码,但无法使用。我也不明白如何创建三个不同的 ActionListeners。
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Interface implements ActionListener{
private JLabel label;
private JLabel label2;
private JLabel label3;
private JTextField textfield;
private JTextField textfield2;
private JTextField textfield3;
private JButton button;
private JButton button2;
private JButton button3;
private JPanel panel;
public static void main(String[] args){
new Interface();
}
public Interface()
{
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600,600);
frame.setLayout(null);
JPanel panel = new JPanel();
panel.setBounds(10,10,600,600);
panel.setLayout(null);
label = new JLabel("Button 1");
label.setBounds(5,5,600,20);
label2 = new JLabel("Button 2");
label2.setBounds(5,5,600,20);
label3 = new JLabel("Button 3");
label3.setBounds(5,5,600,20);
textfield = new JTextField();
textfield.setBounds(5,30,100,20);
JButton button = new JButton("cirkel");
button.setBounds(130,30,100,20);
button.addActionListener(this);
JButton button2 = new JButton("driehoek");
button2.setBounds(250,30,100,20);
button2.addActionListener(this);
JButton button3 = new JButton("vierhoek");
button3.setBounds(370,30,100,20);
button3.addActionListener(this);
panel.add(button);
panel.add(button2);
panel.add(button3);
frame.add(panel);
frame.setVisible(true);
}
public void actionPerformed(ActionEvent arg0)
{
panel.add(label);
panel.add(textfield);
panel.validate();
panel.repaint();
String text = textfield.getText();
// Van de String 'text' een double maken
double diameter = Double.parseDouble(text);
cirkel C1 = new cirkel();
C1.setDiam(diameter);
label.setText("De diameter = " + C1.getDiam() + " cm \n\n");
label.setText("De straal = " + C1.getRadius() + " cm");
label.setText("De oppervlakte van de cirkel = " + C1.berekenOpp() + " cm2");
}
}
您有几个选择:
你可以...
为每个按钮创建一个 ActionListener
,这可以使用外部、内部或匿名 class 来完成,这意味着您为每个相关的按钮提供了一个独立的工作单元只有那个按钮。
出于同样的原因,您也可以利用 Action
API。有关详细信息,请参阅 How to Use Actions
你可以...
检查 ActionEvent#getSource
属性 并将其与按钮的实例进行比较,但您的按钮是在本地定义的
你可以...
使用按钮的actionCommand
属性,为每个按钮设置一个独特的“命令”,您可以使用ActionEvent#getActionCommand
与ActionListener
进行比较触发
无论您使用哪种选择,请仔细查看
How to Write an Action Listeners and How to Use Buttons, Check Boxes, and Radio Buttons了解更多详情
例子
现在,有机会 运行 你的代码,你有一个 NullPointerException
因为 panel
在 ActionListener
的上下文中是 null
.这是因为您正在隐藏变量(声明两次)
// Declared here
private JPanel panel;
public Interface() {
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600, 600);
frame.setLayout(null);
// And here...
JPanel panel = new JPanel();
因此,您可以为每个按钮使用匿名 class...
import java.awt.BorderLayout;
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.JTextField;
public class Interface {
private JLabel label;
private JLabel label2;
private JLabel label3;
private JTextField textfield;
private JTextField textfield2;
private JTextField textfield3;
private JButton button;
private JButton button2;
private JButton button3;
private JPanel panel;
public static void main(String[] args) {
new Interface();
}
public Interface() {
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600, 600);
JPanel buttonPane = new JPanel();
label = new JLabel("Button 1");
label2 = new JLabel("Button 2");
label3 = new JLabel("Button 3");
textfield = new JTextField(5);
JButton button = new JButton("cirkel");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
panel.removeAll();
panel.add(label);
panel.add(textfield);
panel.revalidate();
panel.repaint();
String text = textfield.getText();
// Van de String 'text' een double maken
double diameter = Double.parseDouble(text);
// cirkel C1 = new cirkel();
// C1.setDiam(diameter);
label.setText("De diameter = " + 1 + " cm \n\n");
label.setText("De straal = " + 2 + " cm");
label.setText("De oppervlakte van de cirkel = " + 3 + " cm2");
}
});
JButton button2 = new JButton("driehoek");
button2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
panel.removeAll();
panel.add(label);
panel.add(textfield);
panel.revalidate();
panel.repaint();
// driehoek
}
});
JButton button3 = new JButton("vierhoek");
button3.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
panel.removeAll();
panel.add(label);
panel.add(textfield);
panel.revalidate();
panel.repaint();
// vierhoek
}
});
buttonPane.add(button);
buttonPane.add(button2);
buttonPane.add(button3);
panel = new JPanel();
frame.add(buttonPane, BorderLayout.NORTH);
frame.add(panel);
frame.setVisible(true);
}
}
您将遇到的下一个问题是 NumberFormatException
,因为您
您正在尝试将空白 String
转换为 double
,因为文本字段中还没有任何内容...
如果要创建三个不同的 ActionListener,可以创建三个内部 classes,并为每个 class 实现一个 ActionListener。并将 class 的实例放入 addActionListener()
.
public class Example {
ActionListen listen = new ActionListen();
button.addActionListener(listen);
private class ActionListen implements ActionListener {
public void actionPerformed(ActionEvent e) {
//code here to change...
}
}
}
我有这个带有三个按钮的代码。我想在单击按钮后添加标签和文本字段。所以对于 'button' 我想添加 'label' 和 'textfield.
对于 'button2' 我想添加 'label2' 和 'textfield2'。等等。
我已有此代码,但无法使用。我也不明白如何创建三个不同的 ActionListeners。
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Interface implements ActionListener{
private JLabel label;
private JLabel label2;
private JLabel label3;
private JTextField textfield;
private JTextField textfield2;
private JTextField textfield3;
private JButton button;
private JButton button2;
private JButton button3;
private JPanel panel;
public static void main(String[] args){
new Interface();
}
public Interface()
{
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600,600);
frame.setLayout(null);
JPanel panel = new JPanel();
panel.setBounds(10,10,600,600);
panel.setLayout(null);
label = new JLabel("Button 1");
label.setBounds(5,5,600,20);
label2 = new JLabel("Button 2");
label2.setBounds(5,5,600,20);
label3 = new JLabel("Button 3");
label3.setBounds(5,5,600,20);
textfield = new JTextField();
textfield.setBounds(5,30,100,20);
JButton button = new JButton("cirkel");
button.setBounds(130,30,100,20);
button.addActionListener(this);
JButton button2 = new JButton("driehoek");
button2.setBounds(250,30,100,20);
button2.addActionListener(this);
JButton button3 = new JButton("vierhoek");
button3.setBounds(370,30,100,20);
button3.addActionListener(this);
panel.add(button);
panel.add(button2);
panel.add(button3);
frame.add(panel);
frame.setVisible(true);
}
public void actionPerformed(ActionEvent arg0)
{
panel.add(label);
panel.add(textfield);
panel.validate();
panel.repaint();
String text = textfield.getText();
// Van de String 'text' een double maken
double diameter = Double.parseDouble(text);
cirkel C1 = new cirkel();
C1.setDiam(diameter);
label.setText("De diameter = " + C1.getDiam() + " cm \n\n");
label.setText("De straal = " + C1.getRadius() + " cm");
label.setText("De oppervlakte van de cirkel = " + C1.berekenOpp() + " cm2");
}
}
您有几个选择:
你可以...
为每个按钮创建一个 ActionListener
,这可以使用外部、内部或匿名 class 来完成,这意味着您为每个相关的按钮提供了一个独立的工作单元只有那个按钮。
出于同样的原因,您也可以利用 Action
API。有关详细信息,请参阅 How to Use Actions
你可以...
检查 ActionEvent#getSource
属性 并将其与按钮的实例进行比较,但您的按钮是在本地定义的
你可以...
使用按钮的actionCommand
属性,为每个按钮设置一个独特的“命令”,您可以使用ActionEvent#getActionCommand
与ActionListener
进行比较触发
无论您使用哪种选择,请仔细查看 How to Write an Action Listeners and How to Use Buttons, Check Boxes, and Radio Buttons了解更多详情
例子
现在,有机会 运行 你的代码,你有一个 NullPointerException
因为 panel
在 ActionListener
的上下文中是 null
.这是因为您正在隐藏变量(声明两次)
// Declared here
private JPanel panel;
public Interface() {
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600, 600);
frame.setLayout(null);
// And here...
JPanel panel = new JPanel();
因此,您可以为每个按钮使用匿名 class...
import java.awt.BorderLayout;
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.JTextField;
public class Interface {
private JLabel label;
private JLabel label2;
private JLabel label3;
private JTextField textfield;
private JTextField textfield2;
private JTextField textfield3;
private JButton button;
private JButton button2;
private JButton button3;
private JPanel panel;
public static void main(String[] args) {
new Interface();
}
public Interface() {
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600, 600);
JPanel buttonPane = new JPanel();
label = new JLabel("Button 1");
label2 = new JLabel("Button 2");
label3 = new JLabel("Button 3");
textfield = new JTextField(5);
JButton button = new JButton("cirkel");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
panel.removeAll();
panel.add(label);
panel.add(textfield);
panel.revalidate();
panel.repaint();
String text = textfield.getText();
// Van de String 'text' een double maken
double diameter = Double.parseDouble(text);
// cirkel C1 = new cirkel();
// C1.setDiam(diameter);
label.setText("De diameter = " + 1 + " cm \n\n");
label.setText("De straal = " + 2 + " cm");
label.setText("De oppervlakte van de cirkel = " + 3 + " cm2");
}
});
JButton button2 = new JButton("driehoek");
button2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
panel.removeAll();
panel.add(label);
panel.add(textfield);
panel.revalidate();
panel.repaint();
// driehoek
}
});
JButton button3 = new JButton("vierhoek");
button3.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
panel.removeAll();
panel.add(label);
panel.add(textfield);
panel.revalidate();
panel.repaint();
// vierhoek
}
});
buttonPane.add(button);
buttonPane.add(button2);
buttonPane.add(button3);
panel = new JPanel();
frame.add(buttonPane, BorderLayout.NORTH);
frame.add(panel);
frame.setVisible(true);
}
}
您将遇到的下一个问题是 NumberFormatException
,因为您
您正在尝试将空白 String
转换为 double
,因为文本字段中还没有任何内容...
如果要创建三个不同的 ActionListener,可以创建三个内部 classes,并为每个 class 实现一个 ActionListener。并将 class 的实例放入 addActionListener()
.
public class Example {
ActionListen listen = new ActionListen();
button.addActionListener(listen);
private class ActionListen implements ActionListener {
public void actionPerformed(ActionEvent e) {
//code here to change...
}
}
}