Java ActionListener没有响应

时间:2012-07-17 12:44:33

标签: java swing actionlistener inner-classes

你好所有人都在使用这个网站多年作为潜伏者,但遇到这个问题,无法在任何地方找到解决方案......

我在内部类中有actionlistener,它只是不会回应...你们有什么机会可以查看我的初学者编码,看看你的想法?

抱歉,这里有如此多的代码我唯一有点麻烦的是' AddPet'班级及其内部班级' AddEle'和System.exit方法。当窗口选择宠物类型对话框'打开这些按钮都不会起作用...希望我拥有所有的术语,因为我完全是自学而且刚刚开始。

感谢您的时间

package petshopwk1;

import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.* ;
import javax.swing.*;
import java.util.Scanner;
import javax.swing.JOptionPane ;
import java.util.ArrayList;
import java.util.Date;
import javax.swing.JList;
import java.awt.event.*;

public class CurrentPet2 extends JFrame {
private JButton setName, setDOB, setSold, getName, getDOB, getSold, addPet, changePre,           changeNext, exit, setCurrentPet, getFeel;
private JLabel cPetLabel ;

private Shop theShop = new Shop("Brighton");

private JButton exitButton, Ele, MF, Pet;
String temp = "temp" ;


Date dob = new Date();
public Pet CurrentPetObj = new Pet("", "", true, dob) ;

int cPetIndex ;


DefaultListModel model = new DefaultListModel();
public JList list = new JList(model);


public CurrentPet2 (String cTitle)
            {
super(cTitle) ; 






Pet Alburt = new Pet("Alburt", " 09 APRIL 2009", true) ;
Pet Eddy = new Pet("Eddy", " 13 JANUARY 1982", false) ;
Pet Paul = new Pet("Paul", " 21 DECEMBER 1956", true) ;
Pet Sian = new Pet("Sian", " 11 SEPTEMBER 1988", true) ;
Pet Morrise = new Pet("Morrise", " 26 MARCH 1996", false) ;
Pet Betty = new Pet("Betty", " 31 JANUARY 1962", false) ;
Elephant Ele = new Elephant ("Ele", "13 JANUARY 1982", true, 12) ;
MF NOW = new MF ("NOW", "8 JULY 2012", false, 11, "Rocking") ;


theShop.addPet(0, Alburt);
theShop.addPet(1, Eddy);
theShop.addPet(2, Paul);
theShop.addPet(3, Sian);
theShop.addPet(4, Morrise);
theShop.addPet(5, Betty); 
theShop.addPet(6, Ele);
theShop.addPet(7, NOW);


Container contentPane ;
contentPane = getContentPane();
contentPane.setLayout(new FlowLayout());



cPetLabel = new JLabel("Current Pet Mode");

setCurrentPet = new JButton("Choose current Pet");
setName = new JButton("Set Name") ;
setDOB = new JButton("Set DOB") ;
setSold = new JButton("Set Sold");
getName = new JButton("Get Name") ;
getDOB = new JButton("Get DOB") ;
getSold = new JButton("Get Sold") ;
addPet = new JButton("Add Pet");
changePre = new JButton("Change to Previous") ;
changeNext = new JButton("Change to Next");
getFeel = new JButton("FEEL?");
exit = new JButton("EXIT");

exit.addActionListener(new ActionListener()
{public void actionPerformed(ActionEvent e )
{System.exit(0); }}
);



setCurrentPet.addActionListener(new ChoosePetName());
setName.addActionListener(new       setPetName()) ;
setDOB.addActionListener(new        setPetDOB());
setSold.addActionListener(new       setIsSold());
getName.addActionListener(new       getPetName()) ;
getDOB.addActionListener(new        getPetDOB());
getSold.addActionListener(new       getIsSold());
addPet.addActionListener(new        addPet());
getFeel.addActionListener(new       printFeel());

list.setListData(Shop.thePets.toArray());

list.validate();

changePre.addActionListener(new     changePetPre());
changeNext.addActionListener(new    changePetNext());


contentPane.add(setCurrentPet);
contentPane.add(addPet);
contentPane.add(setName);
contentPane.add(setDOB);
contentPane.add(setSold);
contentPane.add(getName);
contentPane.add(getDOB);
contentPane.add(getSold);
contentPane.add(getFeel) ;

contentPane.add(changePre);

contentPane.add(changeNext);
contentPane.add(exit);
contentPane.add(new JScrollPane(list));


list.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent evt)
{
JList list = (JList) evt.getSource();
if (evt.getClickCount() ==2 )
{
int cPetIndex = list.locationToIndex (evt.getPoint());
CurrentPetObj = Shop.thePets.get(cPetIndex) ;
JOptionPane.showMessageDialog(CurrentPet2.this,               CurrentPetObj + "@ Index " + cPetIndex);
}
}
} 
                                                         );

setLayout(new FlowLayout());
add(exit);



this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
this.setSize(550, 400);
this.setVisible(true);

}



class ChoosePetName implements ActionListener
{
public void actionPerformed(ActionEvent e)
{

String cPetSearch  = JOptionPane.showInputDialog(null, "Please Eneter Pet to work on...") ;

 CurrentPetObj = Shop.findPet(cPetSearch) ;

 int cPetIndex = Shop.thePets.indexOf(CurrentPetObj);
 list.setSelectedIndex(cPetIndex);

 JOptionPane.showMessageDialog(CurrentPet2.this, CurrentPetObj + "@ Index " + cPetIndex); 

 }
 }


class setPetName implements ActionListener
{
public void actionPerformed(ActionEvent e )
{
String nName = JOptionPane.showInputDialog(null, "Please input new Pet name...");

CurrentPetObj.setName(nName);
JOptionPane.showMessageDialog(CurrentPet2.this, CurrentPetObj) ;


}
}

class setPetDOB implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
String nDOB = JOptionPane.showInputDialog(null, "Please input new Pet DOB... (in format 26 MARCH 1996");
CurrentPetObj.setDOB(nDOB) ;
JOptionPane.showMessageDialog(CurrentPet2.this, CurrentPetObj);
}
}

class setIsSold implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
boolean s = Boolean.parseBoolean(JOptionPane.showInputDialog(null, "Please input if new Pet is sold..."));
CurrentPetObj.setIsSold(s);
JOptionPane.showMessageDialog(CurrentPet2.this, CurrentPetObj.toString());
}
}



class getPetName implements ActionListener
{
public void actionPerformed(ActionEvent e )
{
JOptionPane.showMessageDialog(CurrentPet2.this, CurrentPetObj.getName());

}
}

class getPetDOB implements ActionListener
{
public void actionPerformed(ActionEvent e )
{
JOptionPane.showMessageDialog(CurrentPet2.this, CurrentPetObj.getDOB()) ;
}
}

class getIsSold implements ActionListener
{
public void actionPerformed(ActionEvent e )
{
JOptionPane.showMessageDialog(CurrentPet2.this, CurrentPetObj.getIsSold());
}
}

    -----------------------------------------------------------------------
    its just between this and the following line i have the problem. the actionListener responds fine in the earlier class but just cant get it working with the AddPet class and therefore wont call the system.exit or AddEle...

任何帮助都会很棒:)

***class AddPet implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
Container contentPane ;
contentPane = getContentPane();
contentPane.setLayout(new FlowLayout());

JFrame f = new JFrame("Choose pet type dialog");
f.setSize(300, 100);
Container content = f.getContentPane();


Ele = new JButton("Add Elephant");
exitButton = new JButton("EXIT");


exitButton.addActionListener(new ActionListener()
{public void actionPerformed(ActionEvent L )
{System.exit(0); }}
                             );

Ele.addActionListener(new        AddEle());

content.setLayout(new FlowLayout()); 
content.add(new JButton("Add Elephant"));
content.add(new JButton("Add Pet"));
content.add(new JButton("EXIT"));

contentPane.add(Ele);
contentPane.add(exit);

f.setVisible(true);


contentPane.add(MF);
contentPane.add(Pet);
}
}


class AddEle implements ActionListener
{
public void actionPerformed(ActionEvent L )
{

String nName  = JOptionPane.showInputDialog(null, "Please Enter new Pet name...") ;
String nDate  = JOptionPane.showInputDialog(null, "Please input new pet DOB (in format 20 MARCH 2001");

boolean s     = Boolean.parseBoolean(JOptionPane.showInputDialog(null, "Please input if     sold or not? ( true / false"));

int nSize = Integer.parseInt(JOptionPane.showInputDialog(null, "Please input Elephant SIZE..."));

cPetIndex = Integer.parseInt(JOptionPane.showInputDialog(null, "Please input INDEX to place new Pet..."));

Pet CurrentPetObj = new Elephant(nName, nDate, s, nSize) ;
theShop.addPet(cPetIndex, CurrentPetObj) ;
list.setListData(Shop.thePets.toArray());
model.setElementAt(CurrentPetObj, cPetIndex);

JOptionPane.showMessageDialog(CurrentPet2.this, CurrentPetObj + " @ Index " + cPetIndex); 



}

}

}***

class changePetPre implements ActionListener
{
public void actionPerformed(ActionEvent e )
{
int cPetIndex = Shop.thePets.indexOf(CurrentPetObj);

--cPetIndex;
CurrentPetObj = Shop.thePets.get(cPetIndex);
list.setSelectedIndex(cPetIndex);
JOptionPane.showMessageDialog(CurrentPet2.this, "Current Pet is now == " + CurrentPetObj + "@ Index " + cPetIndex); 

}
}

class changePetNext implements ActionListener
{
public void actionPerformed(ActionEvent e )
{
int cPetIndex = Shop.thePets.indexOf(CurrentPetObj);
++cPetIndex;
CurrentPetObj = Shop.thePets.get(cPetIndex);
list.setSelectedIndex(cPetIndex);

JOptionPane.showMessageDialog(CurrentPet2.this, "Current Pet is now == " + CurrentPetObj   + "@ Index " + cPetIndex); 

}
}

class printFeel implements ActionListener
{
public void actionPerformed(ActionEvent e )
{
JOptionPane.showMessageDialog(CurrentPet2.this, "Current feel is now == " + MF.getFeel()); 
}
}


}

1 个答案:

答案 0 :(得分:1)

您正在将动作侦听器添加到未添加到框架的按钮(您执行添加的按钮是新实例,并且没有动作侦听器)

尝试:

content.add(Ele); 
content.add(exitButton); 
AddPet

中的