当我触发按钮的actionlistener时,JList无法刷新。 我可以做的唯一一个让它刷新的方法是回忆一下GUI方法,这种效率并不高效,因为它只是打开了第二个窗口。 有没有人有任何建议让添加和删除按钮自动更新JList?
package movieinfo;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
import javax.swing.BorderFactory;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import org.apache.commons.io.FileUtils;
public class Swinggui {
public static void main(String[] args) throws IOException {
new Swinggui();
}
public Swinggui() throws IOException {
yourMovies();
gui();
Buttons();
}
JFrame maingui;
JButton enter;
JButton remove;
public JTextField movietext;
JList listofmovies;
File textfilemovie;
JScrollPane listscroll;
ListSelectionListener setSearch;
JButton add;
JTextArea movieinfo;
DefaultListModel lmodel;
public void gui() throws IOException {
maingui = new JFrame("Gui");
maingui.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.VERTICAL;
lmodel = new DefaultListModel();
enter = new JButton("Get Info");
c.gridx = 2;
c.gridy = 1;
maingui.add(enter, c);
add = new JButton("add");
c.gridx = 5;
c.gridy = 6;
maingui.add(add, c);
remove = new JButton("del");
c.gridx = 6;
c.gridy = 6;
maingui.add(remove, c);
movieinfo = new JTextArea(5, 20);
movieinfo.setBorder(BorderFactory.createMatteBorder(2, 2, 2, 2,
Color.red));
movietext = new JTextField(18);
c.gridx = 1;
c.gridy = 1;
maingui.add(movietext, c);
JScrollPane scrolll = new JScrollPane(movieinfo);
c.gridx = 1;
c.gridy = 3;
c.gridwidth = 2;
maingui.add(scrolll, c);
final JLabel titlee = new JLabel("Enter movie name below!");
c.gridx = 1;
c.gridy = 0;
maingui.add(titlee, c);
c.gridx = 1;
c.gridy = 3;
maingui.add(titlee, c);
final JLabel watchlist = new JLabel("Watchlist");
c.gridx = 5;
c.gridy = 1;
maingui.add(watchlist, c);
maingui.setResizable(false);
maingui.setVisible(true);
listofmovies = new JList(FileUtils.readLines(textfilemovie).toArray());
listscroll = new JScrollPane(listofmovies);
c.gridx = 4;
c.gridy = 3;
maingui.add(listscroll, c);
movieinfo.setLineWrap(true);
movieinfo.setWrapStyleWord(true);
movieinfo.setEditable(false);
scrolll.getPreferredSize();
listofmovies.addListSelectionListener(setSearch);
maingui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
maingui.pack();
}
public void Buttons() {
enter.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println(apicall.getMovieInfo(movietext.getText()
.replaceAll(" ", "%20")));
movieinfo.setText(apicall.getMovieInfo(movietext.getText()
.replaceAll(" ", "%20")));
}
});
add.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
try {
FileUtils.writeStringToFile(textfilemovie,
"\n" + movietext.getText(), true);
maingui.validate();
maingui.repaint();
} catch (IOException e1) {
e1.printStackTrace();
}
}
});
remove.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
Scanner filescan = null;
File textfiletemp = new File(org.apache.commons.io.FileUtils
.getUserDirectory() + "/yourmoviestemp.txt");
try {
textfiletemp.createNewFile();
} catch (IOException e1) {
e1.printStackTrace();
}
try {
filescan = new Scanner(textfilemovie);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
while (filescan.hasNextLine()) {
String line = filescan.nextLine();
if (line != (String) listofmovies.getSelectedValue()) {
try {
FileUtils.writeStringToFile(textfiletemp, "\n"
+ line, true);
} catch (IOException e) {
e.printStackTrace();
}
}
}
textfiletemp.renameTo(textfilemovie);
textfiletemp.delete();
}
});
}
public void yourMovies() throws IOException {
textfilemovie = new File(
org.apache.commons.io.FileUtils.getUserDirectory()
+ "/yourmovies.txt");
textfilemovie.createNewFile();
setSearch = new ListSelectionListener() {
public void valueChanged(ListSelectionEvent arg0) {
movieinfo.setText(apicall.getMovieInfo(((String) listofmovies
.getSelectedValue()).replaceAll(" ", "%20")));
}
};
}
}
答案 0 :(得分:2)
作为第一个提示:line != (String) listofmovies.getSelectedValue()
不是比较字符串的合适方法。请始终使用String.equals():
!line.equals((String)listofmovies.getSelectedValue())
我能做的唯一方法就是回忆一下GUI 方法,这不是那么有效,因为字面意思只是打开一个 第二个窗口。
很抱歉,但我不知道这是什么意思。
有没有人有任何建议来制作添加和删除按钮 自动更新
JList
?
只需使用列表模型在JList
代码中添加/删除actionPerformed
中的数据。您已经引用了lmodel
DefaultListModel
的实例。请查看DefaultListModel.addElement()和DefaultListModel.removeElement()。
How to Use Lists教程中对此进行了解释。
答案 1 :(得分:0)
当我尝试从FileUtils.readLines(textfilemovie).toArray()添加元素时,我得到一个空指针。
您尝试阅读的文件的名称是什么?
为什么你的代码结构仍然没有遵循Swing教程中的示例???需要多长时间才能被要求这样做?你的代码没有在EDT上执行,这会导致随机错误!
在提问时发布适当的SSCCE。我们无权访问您的FileUtils类。提出问题意味着您已经完成了一些基本的调试并将问题隔离开来,因此您创建了一个演示问题的SSCCE。我们不是她调试你的真实代码。
我厌倦了那些不断提问的人,却没有听从他们给出的任何建议。我们提出这个建议是有原因的。这是为了帮助你编写更好的程序,因为程序设计不佳,你不需要不断地寻求我们的帮助。