gpt4 book ai didi

java - 无法创建 JTextField

转载 作者:行者123 更新时间:2023-12-02 08:20:39 25 4
gpt4 key购买 nike

import org.jsoup.Jsoup;


@SuppressWarnings({ "unused", "serial" })

public class SimpleWebCrawler extends JFrame {

JTextField yourInputField = new JTextField(20);
static JTextArea _resultArea = new JTextArea(200, 200);
JScrollPane scrollingArea = new JScrollPane(_resultArea);
private final static String newline = "\n";
String word2;


public SimpleWebCrawler() throws MalformedURLException {

yourInputField.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
word2 = yourInputField.getText();
}
});


_resultArea.setEditable(false);


try {
URL my_url = new URL("http://" + word2 + "/");
BufferedReader br = new BufferedReader(new InputStreamReader(
my_url.openStream()));
String strTemp = "";
while (null != (strTemp = br.readLine())) {
_resultArea.append(strTemp + newline);
}
} catch (Exception ex) {
ex.printStackTrace();
}

_resultArea.append("\n");
_resultArea.append("\n");
_resultArea.append("\n");


String url = "http://" + word2 + "/";
print("Fetching %s...", url);

try{
Document doc = Jsoup.connect(url).get();
Elements links = doc.select("a[href]");


System.out.println("\n");

BufferedWriter bw = new BufferedWriter(new FileWriter("C:\\Users\\user\\fypworkspace\\FYP\\Link\\abc.txt"));
_resultArea.append("\n");
for (Element link : links) {
print(" %s ", link.attr("abs:href"), trim(link.text(), 35));

bw.write(link.attr("abs:href"));
bw.write(System.getProperty("line.separator"));
}
bw.flush();
bw.close();
} catch (IOException e1) {

}
JPanel content = new JPanel();

content.setLayout(new BorderLayout());
content.add(scrollingArea, BorderLayout.CENTER);
content.add(yourInputField,BorderLayout.SOUTH);


this.setContentPane(content);
this.setTitle("Crawled Links");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.pack();
JPanel content2 = new JPanel();
this.setContentPane(content2);
this.setTitle("Input the URL");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.pack();


}

private static void print(String msg, Object... args) {

_resultArea.append(String.format(msg, args) +newline);
}

private static String trim(String s, int width) {
if (s.length() > width)
return s.substring(0, width - 1) + ".";
else
return s;
}

//.. Get the content pane, set layout, add to center




public static void main(String[] args) throws IOException {

JFrame win = new SimpleWebCrawler();
win.setVisible(true);

}

}

我正在尝试创建一个 JTextField 来接受用户输入。输入会到这行代码去处理代码。

URL my_url = new URL("http://" + word2 + "/");

String url = "http://" + word2 + "/";

但是,代码运行时不会要求用户输入。 JTextField 没有出现,我直接收到错误,因为我没有输入输入。

我正在尝试让 JTextField 接受用户的输入。但是,它没有出现,并且代码直接继续处理,最终得到空的 my_url 和 rmpty url 变量。

如何根据我发布的代码创建 JTextField ?看来我创建的 Jtextfield 与我的代码发生冲突。

最佳答案

Java swing 不遵循命令式方法,而是事件驱动的。你的构造函数方法会全部执行,不会等待你的输入。

您不得将业务逻辑(即所有这些读/写内容)包含到此方法中,而是包含到一个单独的方法中,并从您在输入字段中注册的操作监听器中调用它。 (参见例如http://download.oracle.com/javase/tutorial/uiswing/events/index.html)

注意 A:如果您的逻辑非常繁重,您应该生成一个后台线程,而不是直接在操作监听器中执行它(请参阅 Swingworker )。

注释 B:您的类中有很多奇怪的代码。

this.setContentPane(content);
this.setTitle("Crawled Links");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.pack();
JPanel content2 = new JPanel();
this.setContentPane(content2);
this.setTitle("Input the URL");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.pack();

如前所述,这将立即运行,因此您的面板 content 根本不会显示,因为它会被 content2 覆盖。

关于java - 无法创建 JTextField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5528161/

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