2010-03-09 5 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"; 
} 
} 

Но это не работает, и я не могу понять, почему оно не работает, так что если у кого-то есть некоторое время на помощь мне I было бы приятно.

Спасибо!

ответ

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

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 

Одним из важных изменений является создание одного экземпляра базы данных, к которым добавляются строки (как Amit Kumar уже указывал).

Было много проблем с вашим кодом, в основном незаконными конструкциями. Мой совет - получить хороший учебник/книгу Java и обратить внимание на то, как они решают проблемы. Также, если вы используете Eclipse (или другую современную IDE), он уведомит вас о любых незаконных конструкциях и попытается предложить решения.

Последнее примечание: общедоступные строки и JTextFields имеют одно и то же имя, это создает проблему для компьютера, поскольку он не знает, к какому из них вы обращаетесь (это называется затенением). Определите уникальные имена для каждой переменной внутри класса, чтобы вы не путали компилятор или себя.

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

Я немного сделал работайте над своим кодом, и я пришел к следующему.(Это может быть улучшено еще больше, но это, по крайней мере, намного лучше с точки зрения законности и удобочитаемости)

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

Ahh, трудно поверить, что он делает почти то же самое, он намного красивее на вашем пути, спасибо, что не торопитесь! – user290030

Смежные вопросы