- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
正如标题所示,我需要帮助来创建数据库。什么样的数据库数据库并不重要,我只需要它能够工作!
该程序是一个“音乐列表”,您可以添加歌曲、删除歌曲和编辑歌曲。
我已经编程了大约一个月,所以如果您也能解释数据库方法如何工作等,而不是仅仅给我答案,我将不胜感激:-)。
数据库需要存储3个ArrayList的数据。 3 个数组列表都存储字符串,我使用 JList(模型)的索引连接数组列表。
我需要的功能是:
我不确定使用 3 个数组列表来存储数据是个好主意,所以如果有更好的替代方案,我很高兴知道:-)
当我从数据库调用数据时,数据应该调用到方法addString()。此方法需要 3 个字符串,并将它们添加到同一索引。所以我猜数据库不应该包含任何类型的索引。
“edit”方法位于editSong();中,“remove”方法位于ite.addActionListener中。
第3个数组是:fl,包含歌曲名称; art,其中包含艺术家姓名;youurl,其中包含 youtube url。
代码如下:
公共(public)类 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);
}
}
最佳答案
我建议您再花一个月的时间来了解什么是 MVC 以及 EventBus 的工作原理。有很多关于这方面的教程。您还应该再花一个月的时间来真正关心数据库的工作原理以及它们的主要区别是什么,因为它将改变您编写所有其他部分的方式。
要回答您的问题,您不应该以相同的方法修改 View 、模型,然后将内容保存到数据库中。如果您仍然想这样做,最好的方法是使用 JDO 数据库,例如 http://db.apache.org/jdo/或 Google App Engine。
但是这里无法回答执行此操作的方法,这可能是一项过于复杂的任务。
关于java - 需要帮助来创建数据库 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21204266/
我正在编写一个具有以下签名的 Java 方法。 void Logger(Method method, Object[] args); 如果一个方法(例如 ABC() )调用此方法 Logger,它应该
我是 Java 新手。 我的问题是我的 Java 程序找不到我试图用作的图像文件一个 JButton。 (目前这段代码什么也没做,因为我只是得到了想要的外观第一的)。这是我的主课 代码: packag
好的,今天我在接受采访,我已经编写 Java 代码多年了。采访中说“Java 垃圾收集是一个棘手的问题,我有几个 friend 一直在努力弄清楚。你在这方面做得怎么样?”。她是想骗我吗?还是我的一生都
我的 friend 给了我一个谜语让我解开。它是这样的: There are 100 people. Each one of them, in his turn, does the following
如果我将使用 Java 5 代码的应用程序编译成字节码,生成的 .class 文件是否能够在 Java 1.4 下运行? 如果后者可以工作并且我正在尝试在我的 Java 1.4 应用程序中使用 Jav
有关于why Java doesn't support unsigned types的问题以及一些关于处理无符号类型的问题。我做了一些搜索,似乎 Scala 也不支持无符号数据类型。限制是Java和S
我只是想知道在一个 java 版本中生成的字节码是否可以在其他 java 版本上运行 最佳答案 通常,字节码无需修改即可在 较新 版本的 Java 上运行。它不会在旧版本上运行,除非您使用特殊参数 (
我有一个关于在命令提示符下执行 java 程序的基本问题。 在某些机器上我们需要指定 -cp 。 (类路径)同时执行java程序 (test为java文件名与.class文件存在于同一目录下) jav
我已经阅读 StackOverflow 有一段时间了,现在我才鼓起勇气提出问题。我今年 20 岁,目前在我的家乡(罗马尼亚克卢日-纳波卡)就读 IT 大学。足以介绍:D。 基本上,我有一家提供簿记应用
我有 public JSONObject parseXML(String xml) { JSONObject jsonObject = XML.toJSONObject(xml); r
我已经在 Java 中实现了带有动态类型的简单解释语言。不幸的是我遇到了以下问题。测试时如下代码: def main() { def ks = Map[[1, 2]].keySet()
一直提示输入 1 到 10 的数字 - 结果应将 st、rd、th 和 nd 添加到数字中。编写一个程序,提示用户输入 1 到 10 之间的任意整数,然后以序数形式显示该整数并附加后缀。 public
我有这个 DownloadFile.java 并按预期下载该文件: import java.io.*; import java.net.URL; public class DownloadFile {
我想在 GUI 上添加延迟。我放置了 2 个 for 循环,然后重新绘制了一个标签,但这 2 个 for 循环一个接一个地执行,并且标签被重新绘制到最后一个。 我能做什么? for(int i=0;
我正在对对象 Student 的列表项进行一些测试,但是我更喜欢在 java 类对象中创建硬编码列表,然后从那里提取数据,而不是连接到数据库并在结果集中选择记录。然而,自从我这样做以来已经很长时间了,
我知道对象创建分为三个部分: 声明 实例化 初始化 classA{} classB extends classA{} classA obj = new classB(1,1); 实例化 它必须使用
我有兴趣使用 GPRS 构建车辆跟踪系统。但是,我有一些问题要问以前做过此操作的人: GPRS 是最好的技术吗?人们意识到任何问题吗? 我计划使用 Java/Java EE - 有更好的技术吗? 如果
我可以通过递归方法反转数组,例如:数组={1,2,3,4,5} 数组结果={5,4,3,2,1}但我的结果是相同的数组,我不知道为什么,请帮助我。 public class Recursion { p
有这样的标准方式吗? 包括 Java源代码-测试代码- Ant 或 Maven联合单元持续集成(可能是巡航控制)ClearCase 版本控制工具部署到应用服务器 最后我希望有一个自动构建和集成环境。
我什至不知道这是否可能,我非常怀疑它是否可能,但如果可以,您能告诉我怎么做吗?我只是想知道如何从打印机打印一些文本。 有什么想法吗? 最佳答案 这里有更简单的事情。 import javax.swin
我是一名优秀的程序员,十分优秀!