Java 写入和读取.txt文件,listselectionlistener
我需要一些帮助,让这个程序将Java 写入和读取.txt文件,listselectionlistener,java,actionlistener,jlist,listselectionlistener,Java,Actionlistener,Jlist,Listselectionlistener,我需要一些帮助,让这个程序将JList元素信息写入.txt文件,然后将.txt文件的内容输出到文本区域,而不是将JList元素信息直接输出到文本区域 import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; import java.io.*; import java.lang.System.*; public class ListModel extends JF
JList
元素信息写入.txt
文件,然后将.txt
文件的内容输出到文本区域,而不是将JList
元素信息直接输出到文本区域
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.io.*;
import java.lang.System.*;
public class ListModel extends JFrame {
private JList list;
private DefaultListModel model;
private JTextField inputf;
private JTextField inpute;
private JTextArea text;
private JPanel p1;
private JPanel p2;
private ListSelectionModel ListSelectionModel;
public ListModel() {
setLayout(new FlowLayout());
DefaultListModel model = new DefaultListModel();
list = new JList(model);
JButton addButton = new JButton( "Lägg till" );
model.addElement("Kajsa Åslund");
model.addElement("Erik Carlsson");
model.addElement("John Åkesson");
model.addElement("Per-arne Ingvarsson");
model.addElement("Rebecka Asp");
model.addElement("Linnéa Åslund");
model.addElement("Åsa-Nisse Strong");
model.addElement("Super Lasse");
model.addElement("Alexander Ahl");
model.addElement("Ann Ahl");
model.addElement("Bo Sten");
addButton.addActionListener(
new ActionListener() {
public void actionPerformed( ActionEvent event )
{
final String name=inputf.getText() + " " + inpute.getText();
model.addElement( name );
}
}
);
JButton removeButton =
new JButton( "Ta bort" );
removeButton.addActionListener(
new ActionListener() {
public void actionPerformed( ActionEvent event )
{
setTitle("Borttagning");
try
{
Thread.sleep(1000);
}
catch(InterruptedException e)
{
e.printStackTrace();
}
model.removeElement(list.getSelectedValue());
setTitle("Personer");
}
}
);
text = new JTextArea(5, 20);
text.setEditable(false);
inputf = new JTextField();
inputf.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
}
});
inpute = new JTextField();
inpute.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
}
});
list.setModel(model);
list.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
text.setText(list.getSelectedValue().toString());
}
});
inpute.setBounds(5, 5, 100, 100);
inpute.setPreferredSize(new Dimension(120,20));
inputf.setBounds(10, 10, 150, 150);
inputf.setPreferredSize(new Dimension(120,20));
JScrollPane scroll = new JScrollPane(list);
scroll.setPreferredSize(new Dimension(200,200));
JPanel p2 = new JPanel();
p2.add(text);
p2.add(inputf);
p2.add(inpute);
p2.add(addButton);
p2.add(removeButton);
p2.setLayout(new BoxLayout(p2,BoxLayout.Y_AXIS));
JPanel p1 = new JPanel();
p1.add(scroll);
Container container = getContentPane();
container.add(p1);
container.add(p2);
container.setLayout(new FlowLayout());
setDefaultCloseOperation( EXIT_ON_CLOSE );
setSize( 500, 250 );
setVisible( true );
}
public static void main( String args[] )
{
new ListModel();
}
}
提前感谢!:) 您可以使用基本java I/O API之一的
BufferedWriter()
和BufferedReader()
来实现这一点,您可以阅读它们。学会使用它是值得的
要将model
的内容写入.txt文件,可以使用循环,如下所示:
for(Object string : model.toArray()){
out.write(t + "\n"); // "out" is BufferedWriter object
}
toArray()
将采用数据形式model
,并将其存储在对象[]
数组中。然后,您可以为每个循环使用提取它,并写入文件。
这将把模型
内容打印为.txt文件中的列表,一行一个名称
然后,您可以使用BufferedReader()
,一行接一行地读取它,将一行添加到JTextArea
顺便说一句。我认为你的ramove选项并没有发挥应有的作用。这是因为,您需要选择一个项目来删除它。但当您选择它时,ListSelectionListener()
尝试读取数据表单列表,并在删除该项时抛出NullPointerException()
。事实上,它表现得很古怪。要修复它,只需修改valueChanged()
:
它将从列表中读取数据,只是它不是null
(换句话说已删除)。或者这是可能的吗?但如何将缓冲写入器和读取器放入listselectionlistener?我想这就是我必须要做的,因为每次突出显示新元素时都必须重复这个过程。抱歉,如果这些都是愚蠢的问题,我对编程还比较陌生。但我真的很感谢你给我的帮助:)也许你理解了我最初的要求,也许我是这里的错,也许我误解了你写的东西。但是您所描述的不是从.txt文件向列表中添加了数据吗?因为我的目标是将列表中的数据添加到.txt文件中,然后将.txt文件中的数据输出到文本区域,并将文本文件中的数据保存到中。@AntonMehlqvist你完全正确,我的错误。但是我知道你想要一个保存/加载选项,那么你的目标是什么呢?您想在每次选择某个元素时将一个选定的列表元素写入文件,然后将一个元素检索到JTextArea吗?或者您想让文件中的所有字符串显示在JTextArea上?请你再详细说明一下好吗?
public void valueChanged(ListSelectionEvent e) {
if(list.getSelectedValue()!=null) text.setText(list.getSelectedValue().toString());
}