【问题标题】:What changed in JTextPane getMinimumWidth between Java 6 and Java 7Java 6 和 Java 7 之间的 JTextPane getMinimumWidth 发生了什么变化
【发布时间】:2013-07-31 22:06:54
【问题描述】:

我刚刚将一个应用程序从 Java 6u13 升级到 Java 7u25,我发现 getMinimumWidth 为 JTextPanes 返回的宽度非常不同,这在用户界面中造成了很大的问题。我想了解更多有关更改的信息。任何人都可以指出一个特定的错误 ID 来解决这个问题。下面我的测试程序的输出是:

Java 版本:1.6.0_13 最小尺寸:java.awt.Dimension[width=6,height=25]

Java 版本:1.7.0_25 最小尺寸:java.awt.Dimension[width=33,height=25]

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextPane;
import javax.swing.SwingUtilities;
import javax.swing.text.BadLocationException;
import javax.swing.text.Style;
import javax.swing.text.StyleContext;
import javax.swing.text.StyledDocument;

public class JTextPaneTest extends JTextPane
{
    private static void createAndShowGUI() 
    {
        System.out.println("Java version: " + System.getProperty("java.version"));

        // Create and set up the window.
        JFrame frame = new JFrame("ScaledJTextPane using BufferedImage");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        final JTextPaneTest textPane = new JTextPaneTest();
        StyledDocument doc = textPane.getStyledDocument();
        Style defaultStyle = StyleContext.getDefaultStyleContext().getStyle(StyleContext.DEFAULT_STYLE);

        textPane.setFont(new Font("Dialog", Font.PLAIN, 14));
        String plainText = "This is test.";
        try 
        {
            doc.insertString(doc.getLength(), plainText, defaultStyle);
        } 
        catch (BadLocationException ble) 
        {
            System.err.println("Couldn't insert text into text pane.");
        }

        // Force size calculation
        textPane.getPreferredSize();

        System.out.println("Minimum size: " + textPane.getMinimumSize().toString());

        final JPanel panel = new JPanel();
        panel.add(textPane, BorderLayout.CENTER);

        // Add content to the window.
        panel.setOpaque(true);
        panel.setBackground(Color.WHITE);
        frame.getContentPane().add(panel, BorderLayout.CENTER);
        frame.setSize(400, 300);

        //Display the window.
        frame.setVisible(true);
    }

    public static void main(String[] args) 
    {
        SwingUtilities.invokeLater(new Runnable() 
        {
            public void run() 
            {
                createAndShowGUI();
            }
        });
    }
}

【问题讨论】:

  • 你的意思是getMinimumSize而不是getMinimumWidth?
  • 不知道 - 只是好奇:minSize 从 6 变为 33 怎么会造成问题,我希望 textPane 总是需要更多空间。
  • @RobWagner 是的,我的意思是 getMinimumSize
  • @kleopatra 这使我们对用户可调整大小的文本对象的最小大小和自动换行的计算结果有所偏离。这似乎部分是因为它在我们的代码中暴露了一个错误,但是任何时候 Java 发生这样的根本性变化时,都需要小心谨慎。 (答案 1 很好地说明了这一点。)
  • 同意,像这样无声的变化是一种痛苦

标签: java swing width jtextpane


【解决方案1】:

来自 Oracle 论坛.. 似乎是相关的。 Link

【讨论】:

  • 谢谢,亚尼克。这个链接很有帮助,而且似乎是相关的。
  • 这似乎与我们可能得到的答案一样接近。该链接确实阐明了更改的内容,我使用其中的解决方法来解决我的问题。
猜你喜欢
  • 2013-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多