用于分隔动作侦听器的Java语法

时间:2015-10-10 14:48:26

标签: java swing

请帮助我在我试图完成的周期表中将这些ActionListeners分开。当我执行程序并单击' 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个元素被编码为......)

1 个答案:

答案 0 :(得分:0)

  

当我执行程序并单击“H”时,它会打开所有其他元素

我只能打开一个框架。

  

当点击其他人时,它不起作用。

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

但是,按钮3会打开错误的帧,因为您向按钮添加了错误的侦听器:

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

其他问题:

  1. 您应该在框架可见之前将组件添加到框架中。
  2. 不要硬编码屏幕尺寸,你永远不知道其他用户将使用什么尺寸的屏幕
  3. 因此,代码的顺序可能类似于:

    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"));