2010-03-09 80 views
2

我是一个初学java的人,并且遇到了一个我无法解决的问题。用actionlistener添加到数组

我想添加字符串到我的数组,我测试了我的数组,以便工作。但我的问题是,我创建了一个actionlistener并试图从另一个类中获取文本,然后将其添加到数组中。

我Buttonlistener:

public class ButtonListener extends AddToLibrary implements ActionListener { 
public void actionPerformed(ActionEvent e) { 
    Database dt = new Database(); 
    dt.add(textType, textTitle, textSort, textDesc); 
} } 

我有一个朋友,谁告诉我,我创造我每次按下按钮时,一个新的数据库,但我该怎么做,如果我只是想“负荷”吗?可以清除该数据库是我的数组的类名。

这个更“有趣”的部分是,当我在eclipse中运行它时,它调试器没有向我显示任何明确的错误,并且由于我在java中的知识有限,这对我来说太过于了。

我buttonlistener是歌厅从AddToLibrary的信息,它看起来像这样:

public class AddToLibrary extends JPanel{ 
public String textTitle; 
public String textSort; 
public String textDesc; 
public String textType; 

public AddToLibrary() { 
    // Förklarande text 
    JLabel titel = new JLabel("Titel"); 
    JLabel sort = new JLabel("Genre"); 
    JLabel desc = new JLabel("Beskriving"); 

    // Textrutor 
    JTextField textTitel = new JTextField(null, 20); 
    textTitel.setToolTipText("ex. Flickan som lekte med elden"); 
    JTextField textSort = new JTextField(null, 10); 
    textSort.setToolTipText("ex. Skräck, Action"); 
    JTextField textDesc = new JTextField(null, 15); 
    textDesc.setToolTipText("ex. Stieg Larsson"); 

    // Knappar 
    JButton addButton = new JButton("Lägg till"); 
    addButton.addActionListener(new ButtonListener());  //Lyssna på knapp 

    // Combobox 
    JComboBox comboBox = new JComboBox(); 
    comboBox.addItem("Film"); 
    comboBox.addItem("CD"); 
    comboBox.addItem("Bok"); 
    comboBox.addItem("Annat"); 

    // Lägg till i panelen 
    add(titel); 
    add(textTitel); 
    add(sort); 
    add(textSort); 
    add(desc); 
    add(textDesc); 
    add(comboBox); 
    add(addButton); 


} 

public String getTitelText(JTextField titelText) { 
    textTitle = "" + titelText.getText(); 
    return textTitle; 
} 

public String getDescText(JTextField descText) { 
    textDesc = "" + descText.getText(); 
    return textDesc; 
} 

public String getSortText(JTextField sortText) { 
    textSort = "" + sortText.getText(); 
    return textSort; 
} 

public String getTypeText(JComboBox comboBox) { 
    return textType = "" + (String) comboBox.getSelectedItem() + ".png"; 
} 
} 

但它不工作,我无法理解为什么它不是工作,所以如果任何人有一定的时间来帮我,我会很高兴。

谢谢!

回答

0
public class ButtonListener extends AddToLibrary implements ActionListener { 
    private Database dt = new Database(); 
    public void actionPerformed(ActionEvent e) { 
     dt.add(textType, textTitle, textSort, textDesc); 
    } 
} 

应该工作。或者更好的是,数据库应该在AddToLibrary中创建,并在其构造函数中传递给ButtonListener。对不起,我没有时间检查你的代码,但如果这不起作用,你可以通知。

+0

感谢您的尝试,但它仍然不会工作,但感谢试试吧! – user290030 2010-03-09 22:53:09

1

一个缺点是在这里:

public class ButtonListener extends AddToLibrary implements ActionListener { 

延伸AddToLibrary创建一个奇怪的继承问题。

简单的解决方案是定义ButtonListener在线:

final Database dt = new Database(); 
addButton.addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      dt.add(getTypeText(comboBox), getTitelText(textTitel), getSortText(textSort), getDescText(textDesc)); 
     } 
}); // Lyssna på knapp 

一个重要的改变是创建向其中添加字符串数据库的一个实例(如阿米特库马尔已经指出的那样)。

你的代码有很多问题,主要是非法构造。我的建议是获得一个好的Java教程/书,并注意他们如何解决问题。此外,如果您使用Eclipse(或其他现代IDE),它会通知您任何非法构造,并尝试提出解决方案。

最后一个注意事项是,公共字符串和JTextField具有相同的名称,这会造成计算机的问题,因为它不知道您指的是哪一个(称为阴影)。为一个类中的每个变量定义唯一的名称,以免混淆编译器或自己。

=====================================

我做了一些在你的代码上工作,我到达了以下。(它甚至可以进一步提高,但是这至少是好了很多,在合法性和可读性方面)

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JComboBox; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 

public class AddToLibrary extends JPanel { 
    private static final long serialVersionUID = 1L; 

    private Database database = new Database(); 

    private JComboBox comboBox = new JComboBox(new String[]{"Film", "CD", "Bok", "Annat"}); 
    private JButton addButton = new JButton("Lägg till"); 

    private JTextField textTitel = new JTextField(null, 20); 
    private JTextField textSort = new JTextField(null, 10); 
    private JTextField textDesc = new JTextField(null, 15); 

    private JLabel titel = new JLabel("Titel"); 
    private JLabel sort = new JLabel("Genre"); 
    private JLabel desc = new JLabel("Beskriving"); 

    public AddToLibrary() { 
     textTitel.setToolTipText("ex. Flickan som lekte med elden"); 
     textSort.setToolTipText("ex. Skräck, Action"); 
     textDesc.setToolTipText("ex. Stieg Larsson"); 

     addButton.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       database.add(comboBox.getSelectedItem() + ".png", 
          textTitel.getText(), 
          textSort.getText(), 
          textDesc.getText() 
       ) 
      } 
     }); // Lyssna på knapp 

     // Lägg till i panelen 
     add(titel); 
     add(textTitel); 
     add(sort); 
     add(textSort); 
     add(desc); 
     add(textDesc); 
     add(comboBox); 
     add(addButton); 
    } 
} 
+0

啊,很难相信它几乎一样,它在你的路上更加美丽,谢谢你花时间! – user290030 2010-03-10 01:24:30