2010-12-12 13 views
4

私は、TextFieldとTextAreaに垂直スクロールバーを追加しようとしています。 私はScrollPaneを使用しており、デフォルトで垂直/水平スクロールバーを作成する必要があります。JScrollBar垂直/水平設定の問題 - Java Swing

問題: 表示されていないデータを表示するには、垂直スクロールバーが必要です。 開始時に垂直スクロールバーが表示されますが、データが増加すると垂直スクロールバーが水平スクロールバーに変わります。 また、TextFieldが消え、その場所に水平スクロールバーのみが表示されます。 私はそれが境界をどのように設定したのだろうと思っていますが、境界を変更しようとしましたが、TextFieldを完全にやめてしまいます。

マイコードスニペット:

public JTextField inputField = new JTextField(); 

public JTextArea talkArea = new JTextArea(); 

public JScrollPane inputFieldScroll = new JScrollPane(inputField); 

public JScrollPane talkAreaScroll = new JScrollPane(talkArea); 
     talkArea.setEditable(false); 

    talkArea.setBackground(Color.white); 

    talkAreaScroll.setBounds(new Rectangle(TALK_LEFT, TALK_TOP, TALK_WIDTH, TALK_HEIGHT));  

    this.getContentPane().add(talkAreaScroll, null); 

    //set input area 

     inputField.setBackground(Color.white); 

    inputField.setBounds(new Rectangle(INPUT_LEFT, INPUT_TOP, INPUT_WIDTH, INPUT_HEIGHT)); 

    inputFieldScroll.setVerticalScrollBar(new JScrollBar()); 

    inputFieldScroll.setBounds(new Rectangle(INPUT_LEFT, INPUT_TOP, INPUT_WIDTH, INPUT_HEIGHT)); 

質問:

が、私はそれが垂直スクロールバー残るように設定する必要があるいくつかのパラメータがありますか? データが巨大な行になったときに入力スクロールバーが入力フィールド全体を占有するのはなぜですか?これは、開始時に適切な垂直スクロールバーとして表示されます。

アドバイスありがとうございます。

おかげ

+0

スクロールバーの

 JScrollPane inputPane = new JScrollPane(inputField, JScrollPane.VERTICAL_SCROLLBAR_NEVER, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 

? – khachik

+0

小さなコンパイル可能かつ実行可能なサンプルを作成して投稿できますか?また、JScrollPane自体のサイズではなく、JScrollPaneのJViewportの推奨サイズを設定するとどうなりますか? –

答えて

3

以下は、上記のコンパイル可能なコードスニペットです。私はあなたが絶対的なポジショニングを使用すべきではなく、むしろレイアウトマネージャを使用するべきであるというCamickrに同意します。 JTextFieldのために水平スクロールバーを絶対に必要とする場合、それを可能にする1つの方法は、これを可能にするJScrollPaneコンストラクタを使用して、常に表示させることです。すなわち、例えば、JTextFieldの上

import java.awt.*; 
import javax.swing.*; 

public class FuSwing1b extends JPanel { 
    private static final int TA_ROWS = 25; 
    private static final int TA_COLS = 60; 
    private JTextField inputField = new JTextField(); 
    private JTextArea talkArea = new JTextArea(TA_ROWS, TA_COLS); 

    public FuSwing1b() { 
     talkArea.setEditable(false); 
     talkArea.setFocusable(false); 
     talkArea.setBackground(Color.white); 
     //talkArea.setPreferredSize(new Dimension(TALK_WIDTH, TALK_HEIGHT)); 

     JScrollPane talkPane = new JScrollPane(talkArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, 
        JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); 
     JScrollPane inputPane = new JScrollPane(inputField, JScrollPane.VERTICAL_SCROLLBAR_NEVER, 
        JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 

     int gap = 10; 
     setLayout(new BorderLayout(gap, gap)); 
     add(talkPane, BorderLayout.CENTER); 
     add(inputPane, BorderLayout.SOUTH); 
     setBorder(BorderFactory.createEmptyBorder(gap , gap, gap, gap)); 
    } 

    private static void createAndShowUI() { 
     JFrame frame = new JFrame("FuSwing1b"); 
     frame.getContentPane().add(new FuSwing1b()); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       createAndShowUI(); 
      } 
     }); 
    } 
} 
+2

スクロールバーが適切に機能するようにするには、テキスト領域の優先サイズを決して設定しないでください。スクロールバーは、テキスト領域の優先サイズがスクロールペインのサイズより大きい場合に表示されます。テキストエリアにテキストを追加しても、そのサイズには影響しません。 – camickr

+0

提案と修正ありがとうございます!もちろん正しいです。これを反映するために、上記の投稿を編集します。 –

+0

こんにちは..私はこれを試しました:(inputField、JScrollPane。 VERTICAL_SCROLLBAR_​​ALWAYS、 JScrollPane.HORIZONTAL_SCROLLBAR_​​NEVER);スクロールペインの設定..違いはありません。データがテキストフィールドのサイズを超えたときに横枠が終了しました:( – JJunior

1

は境界で再生しないでください。レイアウトマネージャを使用すると、これについて心配する必要はありません。

JTextField textField = new JTextField(10); 

これは、10文字以上を保持するテキストフィールドを作成します。

あなたのようなテキストフィールドの使用のものを作成

。文字数がテキストフィールドの表示幅を超えた場合は、左右の矢印キーを使用して残りの文字が表示されます。それはこれまでに見たことのあるすべてのアプリケーションで使用される通常のUIです。水平スクロールバーを使用して独自のUIを作成しようとしないでください。ユーザーはそれに慣れていません。テキスト領域の

あなたは使用して作成することができます。

JTextArea textArea = new JTextArea(5, 30); 
JScrollPane scrollPane = new JScrollPane(textArea); 

を5行と行あたり約30文字でテキスト領域を作成します。

"レイアウトマネージャを使用してフレームにテキストフィールドとスクロールペインを追加し、フレームをパックします。レイアウトマネージャは、コンポネントの最適サイズを決定します。テキストを追加するとスクロールバーがテキストエリアに自動的に表示され、テキストが5行を超えます。

+0

なんらかの理由で、私はあなたの回答を上乗せできません。 : –

関連する問題