2010-12-12 52 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

滾動條上一個JTextField? – khachik 2010-12-12 19:30:40

+0

您可以創建併發佈一個小型可編譯和可運行的示例嗎?另外,如果您設置JScrollPane的JViewport的首選大小而不是JScrollPane本身,會發生什麼情況? – 2010-12-12 19:32:06

回答

3

下面是我上面提到的一個小的可編譯的代碼片段。我同意camickr,你不應該使用絕對定位,而是使用佈局管理器。如果您絕對需要JTextField的水平滾動條,那麼使它成爲工作的一種方式是讓它始終顯示,使用允許的JScrollPane構造函數。即,

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

對於例如

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

)如果你想讓srollbars正常工作,你不應該設置文本區域的首選大小。當文本區域的首選大小大於scrollpane的大小時會出現滾動條。文本區域,然後添加文本對其首選大小沒有影響。 – camickr 2010-12-12 21:07:49

+0

感謝您的建議和更正!您當然是正確的。我將編輯上面的帖子來反映此。 – 2010-12-12 21:15:56

+0

嗨..我試過這個:(inputField,JScrollPane。 VERTICAL_SCROLLBAR_​​ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_​​NEVER);設置爲我的滾動窗格..但沒有任何區別,當數據超出我的文本字段的大小時,結束了水平窗格:( – JJunior 2010-12-12 21:46:18

1

不要玩邊界。使用佈局管理器,您不必擔心這一點。

當您創建的文本字段中是這樣的:

JTextField textField = new JTextField(10); 

這將創建一個文本字段,將擁有至少10個字符。如果字符數超過文本字段的顯示寬度,則使用右/左箭頭鍵可以看到剩餘的字符。這是我見過的所有應用程序使用的普通用戶界面。不要嘗試使用水平滾動條來創建自己的UI。用戶不習慣這一點。

你可以使用它創建文本區域:

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

創建具有5行的文本區域和每行約30個字符。

現在,使用佈局管理器將文本字段和滾動窗格添加到您的框架,然後打包框架。佈局經理將確定組件的最佳尺寸。向文本添加文本時,滾動條會自動出現在文本區域,文本超過5行。

+0

出於某種原因,我無法對您的回覆進行投票。 ( – 2010-12-12 21:19:39