Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法从JTextPane获取文本_Java_Swing_Gettext_Jtextpane - Fatal编程技术网

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
,而是使用一个组件,然后我应该扩展什么组件?