Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.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 如何在编辑窗格中调整编辑区域的大小?_Java_Swing - Fatal编程技术网

Java 如何在编辑窗格中调整编辑区域的大小?

Java 如何在编辑窗格中调整编辑区域的大小?,java,swing,Java,Swing,这是一个关于Java和Swing的问题 我将两个JEditorPane放入两个JScrollPane,然后将两个JScrollPane放入一个JSplitPane。问题是,当我拖动以调整JScrollPane的大小时,一个JEditorPane被扩展,但当我向后拖动时,视图缩小,但编辑区域没有缩小,水平滚动条出现 代码如下所示: import javax.swing.*; import java.awt.*; import java.beans.PropertyChangeEvent; impo

这是一个关于Java和Swing的问题

我将两个JEditorPane放入两个JScrollPane,然后将两个JScrollPane放入一个JSplitPane。问题是,当我拖动以调整JScrollPane的大小时,一个JEditorPane被扩展,但当我向后拖动时,视图缩小,但编辑区域没有缩小,水平滚动条出现

代码如下所示:

import javax.swing.*;
import java.awt.*;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.*;

public class Main {

    private static final int DEFAULT_WIDTH = 800;
    private static final int DEFAULT_HEIGHT = 600;

    public static void main(String[] args) {

        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame = new JFrame();
                frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
                frame.setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);

                JEditorPane editor = new JEditorPane();
                JEditorPane preview = new JEditorPane();

                System.out.println(DEFAULT_WIDTH / 2);
                // editor.setSize(DEFAULT_WIDTH / 2, DEFAULT_HEIGHT);
                editor.setMinimumSize(new Dimension(0, 0));
                // preview.setSize(DEFAULT_WIDTH / 2, DEFAULT_HEIGHT);
                preview.setMinimumSize(new Dimension(0, 0));

                final JScrollPane scrollEditor = new JScrollPane(editor);
                final JScrollPane scrollPreview =  new JScrollPane(preview);

                final JSplitPane innerPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, scrollEditor, scrollPreview);
                innerPane.setContinuousLayout(false);
                frame.add(innerPane, BorderLayout.CENTER);

                innerPane.addPropertyChangeListener(JSplitPane.DIVIDER_LOCATION_PROPERTY, new PropertyChangeListener() {
                    @Override
                    public void propertyChange(PropertyChangeEvent evt) {
                        editor.setSize(innerPane.getLeftComponent().getBounds().width, editor.getHeight());
                        scrollEditor.setSize(innerPane.getLeftComponent().getBounds().width, editor.getHeight());
                    }
                });
                frame.setVisible(true);
            }
        });
    }
}
我尝试使用JEditorPane.setSize,但它不起作用

我怎样才能修好它


谢谢。

您需要为您的
JEditorPane
覆盖
可滚动
界面的默认实现。基本上,您需要告诉JScrollPane,JEditorPane的宽度应该始终适合滚动窗格的视口

final JScrollPane scrollEditor = new JScrollPane(editor, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
final JSplitPane innerPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true, scrollEditor, scrollPreview);

innerPane.addPropertyChangeListener(JSplitPane.DIVIDER_LOCATION_PROPERTY, new PropertyChangeListener() {
                    @Override
                    public void propertyChange(PropertyChangeEvent evt) {

                        editor.setSize(innerPane.getLeftComponent().getBounds().width, editor.getHeight() - 10); // If you want more edge space make 10 to 15 or 20
                        scrollEditor.setSize(innerPane.getLeftComponent().getBounds().width, editor.getHeight());

                    }
                });
您可以使用以下代码来完成此操作:

JEditorPane editor = new JEditorPane()
{
    @Override
    public boolean getScrollableTracksViewportWidth()
    {
        return true;
    }
};

正如我在评论中提到的,您不需要PropertyChangeListener。

您不应该需要PropertyChangeListener。当分隔器移动时,组件的大小应自动改变。如果您需要更多帮助,请发布一篇适当的文章来说明问题。谢谢您的回复,我认为代码已经足够清晰了。问题在于JEditorPane的可编辑文本区域,而不是JEditorPane组件本身。它会随着分隔符进行调整,但是如果我扩展一个编辑器,比如向右拖动分隔符,然后收缩它,比如向左拖动,组件会收缩,但是文本区域中的行长度不会收缩。所以JEditorPane不会在一行中显示所有字符,我必须拖动水平滚动条。清楚吗?不,代码不够清楚,否则我就不会要求SSCCE了。既然你不会花一点力气发布一个SSCCE,我想你真的不需要帮助。我在这里发布这个问题只是为了解决问题或帮助。我修改了代码,现在代码缩短了50行,可编译,并且很好地演示了我遇到的问题。等待您的解决方案。谢谢。如果编辑器没有用滚动窗格包装,我就不能滚动它。如果文字比绝地武士窗格的高度长,我就到不了尽头。你是说你只想要V形卷轴?检查更新的答案。你现在将有垂直滚动。事实上,在我添加第一条评论之前,我已经尝试了你发布的新解决方案,但问题没有解决。虽然水平滚动条没有出现,但行的长度比视图的宽度还要宽。1。是否要显示H滚动条?你告诉我“线的长度比视图的宽度还要宽”,我发布的更新解决方案,注意这个问题。它在这里工作,当它缩小或扩大时,线路长度也在调整。测试@LalithJayasinghe,缩小编辑器窗格的宽度时,代码不会自动换行。试着扩大宽度,文本就会展开,但试着缩小宽度,文本就不会被改写。哇,太棒了!非常感谢,这当然是我想要的!我将查阅文档以了解视口在春季的含义。再次感谢。@AuBee,
这当然是我想要的
-然后别忘了“接受”答案,这样人们就知道问题已经得到了回答。