gpt4 book ai didi

用于分离 Action 监听器的 Java 语法

转载 作者:太空宇宙 更新时间:2023-11-04 13:21:04 25 4
gpt4 key购买 nike

请帮助我在我尝试完成的元素周期表中分离这些 ActionListener。当我执行程序并单击“H”时,它会打开所有其他元素,而当单击其他元素时,它不起作用。所以我需要一种方法来使用任何方法来分离它们......

import javax.swing.*;
import java.awt.*;

import java.awt.event.*;

public class PeriodicTable
{
public static void main (String[] args)
{
JFrame frame = new JFrame("Elements");
frame.setVisible(true);
frame.setSize(1000,1500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JPanel panel = new JPanel();
frame.add(panel);

JButton button1 = new JButton("H");
panel.add(button1);
button1.addActionListener (new Action1());

JButton button2 = new JButton("He");
panel.add(button2);
button2.addActionListener (new Action2());

JButton button3 = new JButton("Li");
panel.add(button3);
button3.addActionListener (new Action2());


}
static class Action1 implements ActionListener
{
public void actionPerformed (ActionEvent e)
{
JFrame frame2 = new JFrame("H");
frame2.setVisible(true);
frame2.setSize(1000,1500);
JLabel label = new JLabel("Hydrogen");
JPanel panel = new JPanel();
frame2.add(panel);
panel.add(label);
}
}
static class Action2 implements ActionListener
{
public void actionPerformed (ActionEvent e)
{
JFrame frame3 = new JFrame("He");
frame3.setVisible(true);
frame3.setSize(1000,1500);
JLabel label = new JLabel("Helium");
JPanel panel = new JPanel();
frame3.add(panel);
panel.add(label);
}
}
static class Action3 implements ActionListener
{
public void actionPerformed (ActionEvent e)
{
JFrame frame4 = new JFrame("Li");
frame4.setVisible(true);
frame4.setSize(1000,1500);
JLabel label = new JLabel("Lithium");
JPanel panel = new JPanel();
frame4.add(panel);
panel.add(label);
}
}
}

提前致谢。(注意:仅对前 3 个元素进行编码...)

最佳答案

When I execute the program and click on 'H', it opens all other elements

只为我打开一帧。

and when the others are clicked, it does not work.

每个按钮都会为我打开一个框架。

但是,按钮 3 打开了错误的框架,因为您向按钮添加了错误的监听器:

//button3.addActionListener (new Action2());
button3.addActionListener (new Action3());

其他问题:

  1. 您应该在使框架可见之前将组件添加到框架中。
  2. 不要对屏幕尺寸进行硬编码,您永远不知道其他用户将使用什么尺寸的屏幕

所以你的代码的顺序可能是这样的:

JLabel label = new JLabel("Helium");
JPanel panel = new JPanel();
panel.add(label);

JFrame frame3 = new JFrame("He");
frame3.add(panel);
frame3.pack();
frame3.setVisible(true);

当然,您确实不想创建数十个单独的 ActionListener。您希望使监听器更加通用,以便可以共享。

类似于:

static class Action implements ActionListener
{
public Action(String element, String description)
{
this.element = element;
this.description = description;
}

public void actionPerformed (ActionEvent e)
{
JLabel label = new JLabel(description);
JPanel panel = new JPanel();
panel.add(label);

JFrame frame3 = new JFrame(element);
frame3.add(panel);
frame3.pack();
frame3.setVisible(true);
}
}

然后,当您创建您使用的监听器时:

button3.addActionListener (new Action("HE", "Helium"));

关于用于分离 Action 监听器的 Java 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33055255/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com