Reputation: 161
As the title suggest, I need help to create a database. What kind of database of database doesn't matter, I just need it to work!
The program is a "musiclist" which you can add songs, remove songs, and edit songs.
I have been programming for about a month, so I would appreciate if you could also explain how the database methods works etc. instead of just give me the answer :-).
The database needs to store the data of 3 ArrayLists. The 3 arraylists all store Strings, and I connect the arraylists using an index of a JList(Model).
The functions that I need is:
I'm not sure its a good idea use 3 arraylists to store the data, so if there's any better alternatives, I would be glad to know :-)
When I call the data from the database, the data should be called to the method addString(). This method takes 3 strings, and add them to the same index. So I guess the database shouldn't contain any kind of index.
The "edit" method is found in editSong();, and the "remove" method is found in ite.addActionListener.
The 3 array is: fl, which contains song name; art, which contains artist name;youurl, which contains youtube url.
Here's the code:
public class MusicList extends 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);
}
}
Upvotes: 0
Views: 124
Reputation: 7038
I suggest you spend another month to learn what is a MVC and how works an EventBus. There are a lot of tutorial about this. You should also spend another month to really care how works a database and what are their main differences because it will change the way you write all the other parts.
To answer your question, you should not modify in the same method the view, the model, and then save stuff in the database. If you still want to do that, the best way is to use a JDO database such as http://db.apache.org/jdo/ or Google App Engine.
But the way to do this can't be answered here, it's probably a too complex task.
Upvotes: 1