2016-03-22 16 views
3

私はJava Swingの初心者です。次のコードについては混乱しています。固定幅のJScrollPane

私の目標は、2 JTextPaneの(s)はその中で垂直スクロールパネルを作るです。最初のJTextPaneは固定幅が親パネルの70%で、2番目のJTextPaneは固定幅が30%です。両方のJTextPaneは固定幅を持つため、垂直方向にのみテキストを展開します。

私はこの2つのJTextPaneに対して1つのスクロールバーしか持たないため、このソリューションを使用します。

私のinitコード:

private void initialize() { 
    frame = new JFrame(); 
    frame.setBounds(100, 100, 616, 374); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.getContentPane().setLayout(new BorderLayout(0, 0)); 

    JScrollPane scrollPane = new JScrollPane(); 
    scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 
    frame.getContentPane().add(scrollPane); 

    JPanel panel = new JPanel(); 
    scrollPane.setViewportView(panel); 
    SpringLayout sl_panel = new SpringLayout(); 
    panel.setLayout(sl_panel); 

    JTextPane leftTextPane = new JTextPane(); 
    sl_panel.putConstraint(SpringLayout.NORTH, leftTextPane, 10, SpringLayout.NORTH, panel); 
    sl_panel.putConstraint(SpringLayout.WEST, leftTextPane, 10, SpringLayout.WEST, panel); 
    panel.add(leftTextPane); 

    JTextPane rightTextPane = new JTextPane(); 
    sl_panel.putConstraint(SpringLayout.NORTH, rightTextPane, 10, SpringLayout.NORTH, panel); 
    sl_panel.putConstraint(SpringLayout.WEST, rightTextPane, 10, SpringLayout.EAST, leftTextPane); 
    sl_panel.putConstraint(SpringLayout.EAST, rightTextPane, -10, SpringLayout.EAST, panel); 
    panel.add(rightTextPane); 

    scrollPane.addComponentListener(new ComponentAdapter() 
    { 
     public void componentResized(ComponentEvent evt) { 
      sl_panel.putConstraint(SpringLayout.EAST, leftTextPane, (int)(scrollPane.getWidth() * 0.7), SpringLayout.WEST, (Component)(evt.getSource())); 
     } 
    }); 
} 

JTextPaneの(複数可)SOUTHには制約がないので、このように育つことができます。

問題:

  • JTextPaneの(S)それらにいくつかのテキストを挿入した後にのみサイズ変更します。
  • 垂直スクロールバーが機能していません。
+0

これはおそらく役立ちます。私はちょうどそれをテストし、提供されたソリューションはJTextPaneでも動作します。あなたはちょっとそれを少し変更する必要がありますhttp://stackoverflow.com/questions/11178994/making-the-jtextarea-or-jeditorpane-in-a-jframe-scrollable – RubioRic

+0

申し訳ありませんが、その例は1つのスクロールバーのためのものです。私の間違い。 – RubioRic

+0

はい、ありがとうございます。 – user3102393

答えて

4

問題は、スクロールペインがコンポーネントを適切なサイズで表示し、必要に応じてスクロールバーを追加することです。

あなたの場合、幅はスクロールペインのビューポートによって制限されます。

したがって、ビューポートに追加するコンポーネントにScrollableインターフェイスを実装する必要があります。 Scrollableインターフェイスを使用すると、コンポーネントの幅をビューポートの幅に合わせることができ、各JTextPaneの幅によってテキストが折り返されます。

この機能を実装する簡単な方法は、Scrollable Panelを使用することです。このクラスはScrollableインタフェースを実装しており、パラメータを使用してScrollableメソッドをオーバーライドできます。

だから、基本的なコードは次のようになります。

ScrollablePanel panel = new ScrollablePanel(new BorderLayout()); 
panel.setScrollableWidth(ScrollablePanel.ScrollableSizeHint.FIT); 
panel.setScrollableHeight(ScrollablePanel.ScrollableSizeHint.STRETCH); 

固定幅を持つ親のパネルと第二JTextPaneの固定幅の最初のJTextPaneの70%、30%を行うに

一つの方法JSplitPaneを使用すると、2つのテキストペインの間に区切り文字があり、テキストが1つにマージされないことがあります。

JSplitPane splitPane = new JSplitPane(); 
splitPane.setLeftComponent(new JTextPane()); 
splitPane.setRightComponent(new JTextPane()); 
splitPane.setResizeWeight(0.7); 
splitPane.setDividerLocation(.7); 

次に、あなただけのフレームにすべてを追加します。

panel.add(splitPane); 
frame.add(new JScrollPane(panel), BorderLayout.CENTER); 

今ディバイダの場所は70%のままになりますと、フレームのサイズが変更されたようなテキストテキスト・ペインが縮小/成長します。

関連する問題