2015-10-10 2 views
1

Пожалуйста, помогите мне разобрать эти ActionListeners в таблице, которую я пытаюсь выполнить. Когда я запускаю программу и нажимаю «H», она открывает все остальные элементы, а при нажатии других - это не работает. Поэтому мне нужен способ отделить их, используя любой метод ...Синтаксис Java для разделения прослушивателей действий

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 элемента закодированы ...)

ответ

0

Когда я запустить программу и нажать на «H», он открывает все остальные элементы открывает

только один кадр для меня.

, а когда другие нажали, это не сработает.

Каждая кнопка открывает для меня один кадр.

Однако, кнопка 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); 

И, конечно, вы на самом деле не хотят создавать десятки отдельных ActionListeners. Вы хотите, чтобы слушатель стал более общим, чтобы он мог быть общим.

Что-то вроде:

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")); 
Смежные вопросы