gpt4 book ai didi

java - 使用从文件中读取的新数据更新 JTextArea

转载 作者:行者123 更新时间:2023-12-02 06:59:57 25 4
gpt4 key购买 nike

我有一个搜索框,用户可以在其中输入某个州,然后它将从文本文件中读取有关该州选举结果的数据。但是我的 JTextArea 不显示新数据。我进行了调试并确定数据正在正确读取。我读过很多与我的问题类似的问题,但没有找到适合我的特定问题的解决方案。谁能就我应该如何解决这个问题提出任何建议。这是我的代码。

    package view;

import data.VoteIO;
import business.State;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.event.*;
import java.io.*;
import java.util.logging.Level;
import java.util.logging.Logger;

//illustrate listening for a selection of the JList
public class Voting2000 extends JFrame implements ActionListener{

private ResultsView votePanel;
private Container pane;
private JTextField search;
private JButton goSearch;
private JLabel instructions;

public Voting2000() throws IOException{
votePanel = new ResultsView(new State("Nebraska", "NE"));
search = new JTextField();
goSearch = new JButton("Search");
instructions = new JLabel("To search for a states input must be in following format State, State's abbreviate for example Nebraska, NE ");
pane = getContentPane();
goSearch.addActionListener(this);
pane.setLayout(new BorderLayout());
pane.add(BorderLayout.NORTH,instructions);
pane.add(BorderLayout.CENTER, votePanel);
pane.add(BorderLayout.SOUTH,search);
pane.add(BorderLayout.EAST,goSearch);
pack();
setVisible(true);
}

public static void main(String[] args) throws IOException{
Voting2000 listing = new Voting2000();
}

public void actionPerformed(ActionEvent e)
{
String state = search.getText().toLowerCase();
String[] fields = state.split(",");
try {
State aState = new State(fields[0].trim(),fields[1].trim());;
votePanel = new ResultsView(aState);
pane.add(BorderLayout.CENTER,votePanel);
pane.revalidate();
pane.repaint();
} catch (IOException ex) {
Logger.getLogger(Voting2000.class.getName()).log(Level.SEVERE, null, ex);
}
}

}

这是创建 JTextArea 的 ResultsView 类

package view;

import javax.swing.*;
import java.util.List;
import business.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

/**
*
* @author rmildenb
*/
public class ResultsView extends JPanel{
private JTextArea results;
private Stats stat;


public ResultsView(){

createView();
}

public ResultsView(Stats state) {
this.stat = state;
createView();
}

public void createView(){
results = new JTextArea(5, 35);
JScrollPane pane = new JScrollPane(results);
pane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
this.add(pane);
showInformation();
}

public void showInformation(){
results.setText("");
results.setText(stat.getDescription());
results.setCaretPosition(0);

}



}

我尝试从容器 Pane 中删除 votePanel 并重新绘制它,但当我尝试添加刚刚创建的新投票面板并重新绘制 Pane 时,什么也没有出现。

最佳答案

votePanel = new ResultsView(aState);

创建新组件不会将该组件添加到 GUI。该组件只是位于内存中。

您应该有一种方法,可以简单地用新文本刷新文本区域,而不是创建新的 ResultsView 面板。然后文本区域将自动重新绘制。

另一个选项要复杂得多。代码类似于:

panel.remove(exisiting ResultsView panel);
panel.add( new ResultsView panel );
panel.revalidate();
panel.repaint();

revalidate() 是关键,因为它会调用布局管理器,以便可以正确调整所有组件的大小和位置。

关于java - 使用从文件中读取的新数据更新 JTextArea,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16803649/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com