5

ユーザーがマウスを使用してサイズを変更できるコメントボックス機能をアプリケーションに実装しています。JEditorPaneこのコメントボックスには、ユーザーがコメントを挿入できるスクロールペインが含まれています。次の理由で、スクロールペイン内にエディターペインを追加しました。

jeditorpaneの自動スコーリング

ユーザーがコメントボックスのサイズを変更すると、とに必要なサイズを設定しJScrollPaneますJEditorPane。ユーザーがコメントボックスのサイズを大きくすると、これらのコンポーネントのサイズは必要に応じて大きくなりますが、コメントボックスのサイズを小さくすると、サイズをJEditorPane設定してもサイズは小さくなりません。これにより、スクロールペイン内のスクロールバーが表示されます。

setPreferrredSize、、setSizeを使ってみsetMaximumSizeましたJEditorPane。それでも、エディターペインのサイズは縮小していません。サイズ設定後、電話をかけてみrevalidate()ましたが使用できませんでした。updateUI()

私はJava1.4.2を使用しています。

洞察をお願いします。

4

3 に答える 3

9

getScrollableTracksViewportWidth()これは長い間回答されていないことを認識していますが、将来の参考のために、常に true を返すようにオーバーライドするだけです。

JEditorPane pane = new JEditorPane() {
    public boolean getScrollableTracksViewportWidth() {
        return true;
    }
};
panel.add(new JScrollPane(pane));
于 2011-10-25T12:59:19.840 に答える
4

実際には可能です、luiscubal。方法は次のとおりです。

JScrollPane に、サイズ変更イベント用の ComponentListener を追加します。

public static void main(String...args) {
    //our test frame
    JFrame frame = new JFrame("JEditorPane inside JScrollPane resizing");
    frame.setLayout(new BorderLayout());

    //our editing pane
    final JEditorPane editor = new JEditorPane();

    //our simple scroll pane
    final JScrollPane scroller = new JScrollPane(editor);

    //NOTE: this is the magic that is kind of a workaround
            // you can also implement your own type of JScrollPane
            // using the JScrollBar and a JViewport which is the 
            // preferred method of doing something like this the 
            // other option is to create a JEditorPane subclass that
            // implements the Scrollable interface.
    scroller.addComponentListener(new ComponentAdapter() {
        @Override
        public void componentResized(ComponentEvent e) {
            editor.setSize(new Dimension(
                               scroller.getWidth()-20, 
                               scroller.getHeight()-20));
        }
    });

    //just use up the entire frame area.
    frame.add(scroller, BorderLayout.CENTER);

    //quick and dirty close event handler
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(320, 240); //something not too big
    frame.setLocationRelativeTo(null); //centers window on screen
    frame.setVisible(true); // normally done in a SwingUtilities.invokeLater
}

それは可能ですluiscubalを見てください。Java では不可能なことをすぐに発表しないでください。swing API は静かで柔軟性があり、多くの作業を行うことができます。ただし、JComponents を使用するために作成されていない方法で使用すると、問題が発生し、2 つの選択肢があります。

  1. サブクラス サブクラス サブクラス 基本的に独自のコンポーネントを作成します。
  2. 上記の解決策のような回避策を見つけてください。
于 2009-10-06T11:57:19.630 に答える
-1

JScrollPane 内の JEditorPane のサイズを小さくしてから小さくすることはできません。代わりに JTextArea を使用することもできます。

于 2008-11-11T18:32:03.753 に答える