2014-01-18 4 views
0

Как следует из названия, мне нужна помощь в создании базы данных. Какая база данных базы данных не имеет значения, мне просто нужно ее работать!Нужна помощь в создании базы данных (Java)

Программа является «музыкальным списком», который вы можете добавлять, удалять песни и редактировать песни.

Я программировал около месяца, поэтому я был бы признателен, если бы вы могли также объяснить, как работают методы базы данных и т. Д., А не просто дать мне ответ :-).

База данных должна хранить данные из 3 ArrayLists. 3 arraylists все хранят Строки, и я соединяю arraylists, используя индекс JList (Модель).

Функции, которые мне нужно это:

  • Хранить 3 ArrayLists в базе данных. Вероятно, проблема, связанная с тем, что аррайалисты связаны с индексом, как песня (индекс 1), художник (индекс 1) необходимо хранить вместе.
  • Мне нужно убрать из базы данных по определенному индексу.
  • Мне нужно иметь возможность редактировать из базы данных по определенному индексу. Мне нужно иметь возможность вызывать контент из отдельных arraylists, например: получить контент из песни (индекс 5), поэтому добавить все 3 arraylist в 1 строку не вариант.

Я не уверен, что его хорошо использовать идею 3 ArrayLists для хранения данных, так что если есть какие-то лучшие альтернативы, я был бы рад знать :-)

Когда я называю данные из базы данных, данные должны вызываться методом addString(). Этот метод принимает 3 строки и добавляет их к одному индексу. Поэтому я думаю, что база данных не должна содержать какой-либо индекс.

Метод «edit» находится в editSong() ;, а метод «remove» находится в ite.addActionListener.

3 массив: fl, который содержит название песни; искусство, которое содержит имя исполнителя; youurl, который содержит URL-адрес youtube.

Вот код:

общественного класса MusicList расширяет JFrame {

public JTextField af; 
private JList jl; 
private JButton add; 
private JButton edit; 
private JButton test; 
private JPanel jp; 
private JScrollPane sp; 
private JTextField artist; 
private JButton save; 
private JButton listb; 
private JPopupMenu jpo; 
private JMenuItem ite; 
private JButton editsave; 
private JButton editlist; 
private JTextField youtube; 
private JLabel ytl; 
private JLabel arti; 
private JLabel songg; 
int g; 
//creates a DefaultListModel.. actions at the JList can be made through here. e.g if adding to jlist is m.addElement(); 
DefaultListModel<String> m = new DefaultListModel<String>(); 
//creates arraylists 
List<String> fl = new ArrayList<String>(); 
List<String> art = new ArrayList<String>(); 
List<String> youurl = new ArrayList<String>(); 

public MusicList(){ 
    super("Musiclist - Alpha"); 
    setLayout(null); 

    jl = new JList(m); 
    add(jl); 
    //creates a scrollpane, "implements jlist" 
    sp = new JScrollPane(jl); 
    sp.setBounds(30,30,195,200); 
    add(sp); 
    //creates the textfield to contain songname 
    af = new JTextField(12); 
    String afs = af.getText(); 
    af.setBounds(20,30,210,20); 
    add(af); 
    af.setVisible(false); 
    //opens the add menu 
    add = new JButton("add song"); 
    add.setBounds(20,250,100,20); 
    add(add); 
    //opens the edit menu 
    edit = new JButton("edit song"); 
    edit.setBounds(135,250,100,20); 
    add(edit); 
    //this button checks if art and fl(arraylists) match to the index. 
    test = new JButton("test"); 
    test.setBounds(300, 40, 80, 20); 
    add(test); 
    //the textfield which will pass the artist string.. used in add and edit 
    artist = new JTextField(); 
    artist.setBounds(20,70,210,20); 
    add(artist); 
    artist.setVisible(false); 
    //adds back button in "add" menu 
    listb = new JButton("back"); 
    listb.setBounds(135,250,100,20); 
    add(listb); 
    listb.setVisible(false); 
    //adds save button on "add" menu 
    save = new JButton("save"); 
    save.setBounds(20,250,100,20); 
    add(save); 
    save.setVisible(false); 
    //adds the back button on "edit" menu 
    editlist = new JButton("back"); 
    editlist.setBounds(135, 250, 100, 20); 
    add(editlist); 
    editlist.setVisible(false); 
    //adds the save button on "edit" menu 
    editsave = new JButton ("save"); 
    editsave.setBounds(20,250,100,20); 
    add(editsave); 
    editsave.setVisible(false); 
    //adds the youtube textfield 
    youtube = new JTextField(); 
    youtube.setBounds(20,110,120,20); 
    add(youtube); 
    youtube.setVisible(false); 
    //adds jlabel 
    ytl = new JLabel("https://www.youtube.com/watch"); 
    ytl.setBounds(20,90,200,20); 
    add(ytl); 
    ytl.setVisible(false); 

    arti = new JLabel("Artist"); 
    arti.setBounds(20,50,170,20); 
    add(arti); 
    arti.setVisible(false); 

    songg = new JLabel("Song"); 
    songg.setBounds(20,10,170,20); 
    add(songg); 
    songg.setVisible(false); 
    //button to open the add window 
    add.addActionListener(
      new ActionListener(){ 
      public void actionPerformed(ActionEvent event){ 

       jl.setVisible(false); 
       sp.setVisible(false); 
       add.setVisible(false); 
       edit.setVisible(false); 
       listb.setVisible(true); 
       save.setVisible(true); 
       af.setVisible(true);  
       artist.setVisible(true); 
       youtube.setVisible(true); 
       ytl.setVisible(true); 
       songg.setVisible(true); 
       arti.setVisible(true); 
       af.requestFocus(); 
       }}); 


    edit.addActionListener(
      new ActionListener(){ 
       public void actionPerformed(ActionEvent event){ 

        System.out.println(jl.getSelectedIndex()); 
        //checks if theres an selected index.. unselected index = -1. 
        if(jl.getSelectedIndex()<0){ 
         JOptionPane.showMessageDialog(null, "Please select a song to edit"); 
        }else{ 
        //open edit window 
        jl.setVisible(false); 
        sp.setVisible(false); 
        add.setVisible(false); 
        edit.setVisible(false); 
        editlist.setVisible(true); 
        editsave.setVisible(true); 
        af.setVisible(true);  
        artist.setVisible(true); 
        youtube.setVisible(true); 
        ytl.setVisible(true); 
        songg.setVisible(true); 
        arti.setVisible(true); 
        //takes selected index, and set text of textfield af and artists to selected index. 
        final int i = jl.getSelectedIndex(); 
        if(i>=0){ 
        System.out.println(i); 
        af.setText(fl.get(i)); 
        artist.setText(art.get(i)); 
        youtube.setText(youurl.get(i)); 
        }}}}); 
    //test button.. checks if index + song + artist match. 
    test.addActionListener(
      new ActionListener(){ 
       public void actionPerformed(ActionEvent event){ 

        final int i = jl.getSelectedIndex(); 
        if(i>=0){ 
         //String j = (m.getElementAt(i)); 
         //System.out.println(j); 
         System.out.println(fl.get(i)); 
         System.out.println(art.get(i)); 
         System.out.println(youurl.get(i)); 
         }}}); 



    jl.addMouseListener(new MouseAdapter() { 
     public void mouseClicked(MouseEvent evt) { 
      //adds a actionlistener to Jlist 
      JList jl = (JList)evt.getSource(); 
      //if double click--- 
      if (evt.getClickCount() == 2) { 
       int index = jl.locationToIndex(evt.getPoint()); 
       String url = ("https://www.youtube.com/watch"+youurl.get(index)); 

       if(Desktop.isDesktopSupported()){ 
        Desktop desktop = Desktop.getDesktop(); 
        try { 
         desktop.browse(new URI(url)); 
        } catch (IOException | URISyntaxException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
       }else{ 
        Runtime runtime = Runtime.getRuntime(); 
        try { 
         runtime.exec("xdg-open " + url); 
        } catch (IOException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
       } 

      } else if (evt.getClickCount() == 3) { // Triple-click 
       int index = jl.locationToIndex(evt.getPoint()); 
       }}}); 
    //listb is the "back to list" button. 
    listb.addActionListener(
      new ActionListener(){ 
       public void actionPerformed(ActionEvent event){ 
       //if u are at add window, listb will take u back to the list of songs. 
        jl.setVisible(true); 
        sp.setVisible(true); 
        add.setVisible(true); 
        edit.setVisible(true); 
        listb.setVisible(false); 
        save.setVisible(false); 
        af.setVisible(false); 
        artist.setVisible(false); 
        youtube.setVisible(false); 
        ytl.setVisible(false); 
        songg.setVisible(false); 
        arti.setVisible(false); 
       }}); 

    save.addActionListener(
      new ActionListener(){ 
       public void actionPerformed(ActionEvent event){ 
        //takes the afart, and save it to the JList(first passed to addString) 
        String getart = artist.getText(); 
        String getaf = af.getText(); 
        String afart = (getaf+" - "+getart); 
        String yt = youtube.getText(); 
        //pass afart to addString method 
        addString(getaf,getart,yt); 
        af.setText(null); 
        youtube.setText(null); 
        jl.requestFocus(); 
        artist.setText(null); 
        //set the window back to "list of songs" 
        jl.setVisible(true); 
        sp.setVisible(true); 
        add.setVisible(true); 
        edit.setVisible(true); 
        listb.setVisible(false); 
        save.setVisible(false); 
        af.setVisible(false); 
        artist.setVisible(false); 
        youtube.setVisible(false); 
        ytl.setVisible(false); 
        songg.setVisible(false); 
        arti.setVisible(false); 
        }}); 
    //adds another mouselistener to jl 
    jl.addMouseListener(
      new MouseAdapter(){ 

       public void mousePressed(MouseEvent e) {check(e);} 
       public void mouseReleased(MouseEvent e) {check(e);} 
       //mouse event right click 
       public void check(MouseEvent e) { 
        if (e.isPopupTrigger()) { //if the event shows the menu 
         jl.setSelectedIndex(jl.locationToIndex(e.getPoint())); //select the item 
         //creates a popupmenu. 
          JPopupMenu jpo = new JPopupMenu(); 
          //creates a item that links to popupmenu.. JMenuItem works like a button 
          //this JMenuItem is a remove button 
          JMenuItem ite = new JMenuItem("remove"); 
          jpo.add(ite); 
          jpo.show(jl, e.getX(), e.getY()); //and show the menu 
     //JMenuItem actionListener.   
     ite.addActionListener(
       new ActionListener(){ 
        public void actionPerformed(ActionEvent e){ 
        //takes selectedIndex, and remove it from the two arraylist, + the Modellist(jlist) 
         final int i = jl.getSelectedIndex(); 
         if(i>=0){ 
          m.removeElementAt(i); 
          fl.remove(i); 
          art.remove(i); 
          youurl.remove(i); 
         }}});}}}); 
//ActionListener for the back button in the edit menu 
    editlist.addActionListener(
      new ActionListener(){ 
       public void actionPerformed(ActionEvent e){ 
        jl.setVisible(true); 
        sp.setVisible(true); 
        add.setVisible(true); 
        edit.setVisible(true); 
        editlist.setVisible(false); 
        editsave.setVisible(false); 
        youtube.setVisible(false); 
        ytl.setVisible(false); 
        af.setVisible(false); 
        artist.setVisible(false); 
        songg.setVisible(false); 
        arti.setVisible(false); 
        youtube.setText(null); 
        af.setText(null); 
        artist.setText(null); 
       }}); 
    //ActionListener for the save buttin in the edit menu 
    editsave.addActionListener(
      new ActionListener(){ 
       public void actionPerformed(ActionEvent e){ 
        //takes 2 string, and the int from getSelected index, and pass it to editSong(); method. 
        String aff = af.getText(); 
        String artt = artist.getText(); 
        String yte = youtube.getText(); 
        final int f = jl.getSelectedIndex(); 
        //System.out.println(f); 
        editSong(f,aff,artt,yte); 
        //close the edit window 
        jl.setVisible(true); 
        sp.setVisible(true); 
        add.setVisible(true); 
        edit.setVisible(true); 
        editlist.setVisible(false); 
        editsave.setVisible(false); 
        youtube.setVisible(false); 
        ytl.setVisible(false); 
        af.setVisible(false); 
        artist.setVisible(false); 
        songg.setVisible(false); 
        arti.setVisible(false); 
        youtube.setText(null); 
        af.setText(null); 
        artist.setText(null); 
       }}); 

} 
//addString method adds new string to JList, and put them at the next avaiable index. 
public void addString(String o, String l, String yt){ 
    //adds the songname and artistname to the arratlist. 
    fl.add(o); 
    art.add(l); 
    youurl.add(yt); 
    String p = (o+" - "+l); 
    //adds the artists+songname to the jlist. 
    m.addElement(p.toString()); 
} 
public void editSong(int i, String song, String artt,String yte){ 
    String s = song; 
    String a = artt; 
    String sa = (s+" - "+a); 
    //fl.add(i,null); 
    //remove object at the indexnumber "i"(current index selected) from arraylists. 
    fl.remove(i); 
    art.remove(i); 
    youurl.remove(i); 
    //adds the new string passed in from "editsave", and put them to selectedIndex.. 
    fl.add(i,s); 
    art.add(i,a); 
    youurl.add(i,yte); 
    //remove old JList element, and put in the new. 
    m.removeElementAt(i); 
    m.add(i,sa); 
    } 

}

+0

Вы не должны сохранять свои данные в трех списках. Вместо этого определите класс для ваших данных. Basic ood ... Это упростит ваш метод, поскольку вам нужно будет обходить только один объект вместо трех строк. –

ответ

1

Я предлагаю вам потратить еще месяц, чтобы узнать, что такое MVC и как работает EventBus. Об этом много учебника. Вы также должны провести еще месяц, чтобы действительно заботиться о том, как работает база данных и каковы ее основные различия, потому что она изменит способ написания всех других частей.

Чтобы ответить на ваш вопрос, вы не должны изменять в том же методе вид, модель, а затем сохранять данные в базе данных. Если вы все еще хотите это сделать, лучший способ - использовать базу данных JDO, такую ​​как http://db.apache.org/jdo/ или Google App Engine.

Но здесь не на что ответить, это, вероятно, слишком сложная задача.

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