2012-07-17 29 views
-4

您好所有一直在使用这个网站的年龄作为一个潜伏者,但遇到这个问题,并不能找到任何地方的解决办法...的Java的ActionListener没有响应

我有一个内部类,它只是不会回应的ActionListener ...任何机会你可以看看我的初学者编码,看看你的想法?

抱歉孤单这么多代码在这里具有是“AddPet”类及其内部类“AddEle”和System.exit方法麻烦的唯一位IM。当窗口“选择宠物类型对话框”打开时,这些按钮都不会起作用......希望我拥有所有的术语,就像我完全自学并刚刚起步一样。

感谢您的时间

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()); 
} 
} 


} 
+4

请包括[SSCCE(HTTP://www.sscce。组织)展示问题。 – user1329572 2012-07-17 12:47:11

+0

哪部分不工作? (什么按钮等) – 2012-07-17 12:47:40

+0

它从中间窗口的所有作品appart,类AddPet打开,但没有按钮(退出,Ele例如)将工作,所以它不会调用AddEle类...我有一些感觉理由动作监听者不能使用这种方式/ IM做得不对... – 2012-07-17 12:51:21

回答

1

你加入行动听众的按钮你不不添加到框架(你的附加是新的情况下,不具备操作侦听)

尝试:

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

AddPet

+0

谢谢Attila!设法弄明白这一点,看起来像我需要修改JFrame和Container之间的区别和/或交互,结果只是一个错误命名的例子,我想......谢谢所有:) – 2012-07-17 13:26:26