gpt4 book ai didi

java - 在 JTabbedpane 中检索 Textarea 的内容

转载 作者:行者123 更新时间:2023-12-04 05:17:48 24 4
gpt4 key购买 nike

我正在编写一个使用 JTabbedpane 的 Swing 应用程序。
可以在选项卡中打开日志文件并根据需要将其“解析”到另一个选项卡。
将解析的内容保存到文本文件时遇到了问题。
每个选项卡由 JPanel 中的 JTextarea 组成。

<pre>
private void setContentsOfParsedLogFile(JPanel content) {
JTextArea textArea = new JTextArea();
addContentsToTextArea(textArea);
content.add(new JScrollPane(textArea));
content.setLayout(new GridLayout(1, 1));
pane.addTab(parsedTabName(), content);
}

private void addContentsToTextArea(JTextArea textArea) {
if (!parsedFileAlreadyOpen()) {
PortLogParser lp = new PortLogParser();
lp.parseLogFile(new File(activeTabFullName));
ArrayList<String> sb = lp.getParsedMsg();
for (String s : sb) {
textArea.append(s + System.getProperty("line.separator"));
}
}
}
</pre>

希望我可以使用以下方法获取文本:

String text = ((JTextArea) pane.getSelectedComponent()).getText();

在行动中执行:
<pre>
private void createSaveFileMenuItem() {
saveLogFile = new JMenuItem("Save Log File");
saveLogFile.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.ALT_MASK));
saveLogFile.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
saveContentOfActiveTab();
}
});
}

private void saveContentOfActiveTab() {
JFileChooser fc = new JFileChooser();
int returnVal = fc.showSaveDialog(this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = fc.getSelectedFile();
try {
saveContentsToFile(file);
} catch (IOException e1) {
e1.printStackTrace();
}
}
}

private void saveContentsToFile(File file) throws IOException {
createNewFileIfItDoesntExist(file);
BufferedWriter bw = new BufferedWriter(new FileWriter(file.getAbsoluteFile()));
//System.out.println(pane.getSelectedIndex());
//System.out.println(pane.getSelectedComponent());
/*
TODO
the component is the container JPanel. How do I select the textarea and it's content??
*/
// String text = ((JTextArea) pane.getSelectedComponent()).getText();
// bw.write(text);
bw.close();
}

private void createNewFileIfItDoesntExist(File file) throws IOException {
if (!file.exists()) {
file.createNewFile();
}
}
</pre>

但选定的组件是 JPanel。
有没有办法选择包含在 JPanel 中的 textarea 中的文本?
我没有唯一标识每个文本区域,所以这可能是一个问题?

最佳答案

一种方法是创建 JPanel 的子类。具有关联的 JTextArea :

class LogTextPanel extends JPanel {

private final JTextArea textArea;

public LogTextPanel() {
super(new GridLayout(1, 1));

textArea = new JTextArea();
add(new JScrollPane(textArea));
}

public void append(String text) {
textArea.append(text);
}

public String getText() {
return textArea.getText();
}
}

然后,您可以使用以下方法从所选面板中检索文本:
String text = ((LogTextPanel)pane.getSelectedComponent()).getText();

关于java - 在 JTabbedpane 中检索 Textarea 的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14037555/

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