Java 无法从JTextPane获取文本
因此,我有一个Java 无法从JTextPane获取文本,java,swing,gettext,jtextpane,Java,Swing,Gettext,Jtextpane,因此,我有一个JTextPane,我有一个方法返回一个字符串,其中包含JTextPane中的文本。几周来我一直在努力解决这个问题。getText()方法返回一个空行。我尝试获取文档长度,但返回0 代码如下: import java.awt.*; import javax.swing.*; public class CodeTabs extends JTabbedPane { private JTextPane codearea; private JScrollPane scro
JTextPane
,我有一个方法返回一个字符串
,其中包含JTextPane
中的文本。几周来我一直在努力解决这个问题。getText()
方法返回一个空行。我尝试获取文档长度,但返回0
代码如下:
import java.awt.*;
import javax.swing.*;
public class CodeTabs extends JTabbedPane {
private JTextPane codearea;
private JScrollPane scroll;
public CodeTabs() {
setTabPlacement(JTabbedPane.BOTTOM);
codearea = new JTextPane();
scroll = new JScrollPane(codearea, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scroll.setPreferredSize(new Dimension(Toolkit.getDefaultToolkit().getScreenSize()));
addTab("Code", scroll);
}
public String getCode() {
String s = codearea.getText();
System.out.println(s);
return s;
}
}
这样做:-
codearea.getDocument().getText(0, codearea.getDocument().getLength());
我获取了您的代码并添加了一个main方法和一个按钮来触发
getCode()
方法。一切正常。当我在文本区域键入内容时,按下按钮就会打印出来
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CodeTabs extends JTabbedPane {
private JTextPane codearea;
private JScrollPane scroll;
public CodeTabs() {
setTabPlacement(JTabbedPane.BOTTOM);
codearea = new JTextPane();
scroll = new JScrollPane(codearea, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scroll.setPreferredSize(new Dimension( 300,300 ));
JPanel panel = new JPanel( new BorderLayout() );
panel.add( scroll, BorderLayout.CENTER );
JButton comp = new JButton( "Print text" );
comp.addActionListener( new ActionListener() {
@Override
public void actionPerformed( ActionEvent e ) {
getCode();
}
} );
panel.add( comp, BorderLayout.SOUTH );
addTab( "Code", panel );
}
public String getCode() {
String s = codearea.getText();
System.out.println(s);
return s;
}
public static void main( String[] args ) {
EventQueue.invokeLater( new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame( "TestFrame" );
frame.getContentPane().add( new CodeTabs() );
frame.setDefaultCloseOperation( WindowConstants.EXIT_ON_CLOSE );
frame.pack();
frame.setVisible( true );
}
} );
}
}
注意:无需扩展
JTabbedPane
。使用它,而不是扩展它(我把它留在了这个答案中的代码中,以便尽可能地匹配您的代码)听起来可能很愚蠢,但在尝试getText()
之前,请调用setText()
或键入文本。它还可能有助于提供一个新的示例,因为我看不出给定类中的代码有任何错误,一定是其他错误。顺便说一句,如果没有充分的理由,我们不应该真正扩展JTabbedPane
,只需创建一个实例并添加到实例中,我也尝试过,setText可以工作,如果我使用getText方法,它会获取我手动设置的文本。但是如果我在程序中设置文本,然后在程序中添加文本,它只返回我在程序中设置的文本。您的GUI是在上创建的吗?在通过按钮输入文本后,如何调用界面中的getCode()
?SSCE可以帮助我获得更好的帮助,因为我不想听起来像noobish,但那是什么?我从另一个JTabbedPane类调用getCode()。这是我尝试过的许多事情之一,它给了我一个错误,上面写着“未报告的异常BadLocationException;必须捕获或声明要抛出”。因此,我将try语句放在那里,但仍然没有给出任何结果。如果我有一个扩展JFrame的类,我该如何做?@user1845954 1)没有必要有一个扩展JFrame
2)无论您的类是否扩展JFrame
似乎与此问题无关。如果你有一个例子来说明你的问题,把它添加到你的问题中,我们可以看看它。那么我的整个程序应该只上一节课吗?@user1845954当然没有。我的意思是您不需要扩展JFrame
,而是使用一个组件,然后我应该扩展什么组件?