相关疑难解决方法(0)

在JTextPane中包装长单词(Java 7)

在最多6个Java的所有版本中,放置在JScrollPane中的JTextPane的默认行为是:如果可能,在字边界处换行.如果没有,那么无论如何都要包装它们.

在JDK 7中,默认行为似乎是:如果可能,在字边界处换行.如果没有,只需扩展JTextPane的宽度(永远不要换长字).

这很容易重现,这是一个SSCCE:


public class WrappingTest extends JFrame
{

    public static void main ( String[] args )
    {
        new WrappingTest(); 
    }

    public WrappingTest ()
    {
        setSize(200,200);
        getContentPane().setLayout(new BorderLayout());
        JTextPane jtp = new JTextPane();
        JScrollPane jsp = new JScrollPane(jtp);
        jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
        getContentPane().add(jsp,BorderLayout.CENTER);
        setVisible(true);
    }

}
Run Code Online (Sandbox Code Playgroud)

只需在JDK 6和JDK 7中运行它,写一些小字,然后写一个长字,你就会看到差异.

我的问题很简单...... JDK 7中的新默认行为完全混淆了我的程序(他们应该更加小心Oracle更改这种默认值......它们似乎并不重要但是当你使用JTextPane显示时通常包含非常长的字母串的数据,它们并不是那么不重要 - 实际上我要提交错误报告,但是我想在/如果它们不解决它的情况下有一个解决方法).有什么方法可以回到以前的行为?

请注意,我已经检查了相关问题的答案.如何在JTextPane中实现自动换行,以及如何使其包装不带空格的字符串?但是它没有回答这个问题 - 它提供了一种使JTextPane包装完全不考虑空白的方法,但对我来说,如果可能的话,所需的行为是在空白处分割行,如果不可能的话,在其他地方(如以前的Java)版本).

java swing jtextpane word-wrap java-7

16
推荐指数
2
解决办法
5063
查看次数

在一些基本的解析任务中,Java 7比Java 6慢8倍

我最近注意到,自从我更新到Java 7以来,我的代码的特定部分运行速度明显变慢.令人惊讶的是,Java 7的全局速度比Java 6快.

该程序非常庞大,但我成功地提取了一个可重现的代码来演示java 7如何比Java 6慢.

如果您使用Java 6和Java 7运行完全相同的代码,您会发现Java 7比Java 6慢大约7-8倍!

这是代码(不要试图理解它的作用,它只是来自真实代码的摘要,因此并没有真正意义).它基本上是一个解析字符串以格式化其中某些部分的代码:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Window;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.text.SimpleDateFormat;
import java.util.Calendar;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultStyledDocument;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
public class CPerfJava7 extends JFrame {
    private static final long serialVersionUID = 1L;

    // +==============================================================+
    // | Attributes                                                   |
    // +==============================================================+
    JPanel mainPanel;

    public CPseudoHtmlDocument docu;
    private static long totalTime = …
Run Code Online (Sandbox Code Playgroud)

java performance swing java-6 java-7

8
推荐指数
1
解决办法
900
查看次数

JEdi​​torPane和系统字体中的自动换行

我想为用户创建一个大文本字段来输入内容.我还希望它使用默认的系统字体来匹配预期的外观.所以我尝试使用JEditorPane和默认构造函数,它使用纯文本编码.

JEditorPane editorPane = new JEditorPane();
editorPane.setText(gettysburgAddress);
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这样做的问题在于,纯文本编码不会在每个单词的末尾换行到换行符,只有当它用完字符时才会换行.

我尝试使用HTML编码,这个词包装:

JEditorPane editorPane = new JEditorPane("text/html", "");
editorPane.setText(gettysburgAddress);
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这有自动换行,但它默认为不同于系统默认的字体(Mac OS X上的Helvetica,我不想要.

我怎样才能充分利用这两个方面:自动换行和系统默认字体?我不需要任何特殊的格式或任何东西,所以如果可能的话,纯文本编码将会做.

java swing jeditorpane java-7

4
推荐指数
1
解决办法
6305
查看次数

JTextPane不包装文本

我遇到了一个奇怪的问题.我在JscrollPane中有一个JtextPane,它在分发列表中显示大字符串,并且在我使用eclipse运行程序时正确包装代码但是当我在使用java webstart运行相同程序时它停止包装文本.你能告诉我该怎么办.这是代码.

   private JScrollPane displayResults(String distributionList) {
// TODO Auto-generated method stub
  JTextPane textArea = new JTextPane();
  textArea.setText(distributionList);
  textArea.setEditable(false);
  JScrollPane scrollPane = new JScrollPane(textArea);  
  scrollPane.setPreferredSize( new Dimension( 500, 500 ) );
  return scrollPane;
}
Run Code Online (Sandbox Code Playgroud)

}

java swing jtextpane

3
推荐指数
1
解决办法
3668
查看次数

保持文本检索的正确风格

我正在制作类似于聊天的应用程序.为此,我有两个JTextPanes,一个是我正在编写的,一个是显示消息的.这是处理从输入到显示的文本传输的代码:

                String input = textPane.getText();
                if(!input.endsWith("\n")){
                    input+="\n";
                }
                StyledDocument doc = displayPane.getStyledDocument();
                int offset = displayPane.getCaretPosition();
                textPane.setText("");
                try {
                    doc.insertString(offset, input, set);
                } catch (BadLocationException ex) {
                    Logger.getLogger(ChatComponent.class.getName()).log(Level.SEVERE, null, ex);
                }
Run Code Online (Sandbox Code Playgroud)

问题是,如果我在输入文本的某些单词上有颜色,则输出都是彩色的.因此,当移动到显示时(在输入时正确显示),颜色将应用于所有文本.关于如何正确移动文本的任何建议?

请注意,其他格式与粗体,斜体等相同

java swing jtextpane

2
推荐指数
1
解决办法
4024
查看次数

标签 统计

java ×5

swing ×5

java-7 ×3

jtextpane ×3

java-6 ×1

jeditorpane ×1

performance ×1

word-wrap ×1