2012-10-27 122 views
1

我正在为我的大学课程开发一个项目。我只是想知道如果有人知道如何将一个scrollBar添加到JTextArea。目前我的GUI布局正确,唯一缺少的是滚动条。将ScrollPane添加到JTextArea

这就是GUI的样子。正如你可以在第二个TextArea上看到的,我想添加滚动条。

GUI

这是我的代码,我创建窗格。但似乎没有发生...... t2是我想要添加到的JTextArea。

scroll = new JScrollPane(t2); 
    scroll.setBounds(10,60,780,500); 
    scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 

任何帮助将是伟大的,谢谢!

+2

尽量不要使用setBounds和setLayout(null),而应尝试使用布局人几岁。 – Coupon22

+1

根据您展示的信息的小部分,很难知道您做错了什么。也许你正在设置JTextArea的大小(你永远不应该这样做)。考虑创建并发布[sscce](http://sscce.org),以便我们可以看到你的代码实际上在做什么。 –

回答

7

当你的文字去滚动条自带超出所示您的观看区域的界限。不要使用Absolute Positioning,对于这样的小谈话,总是更喜欢Layout Managers,请阅读第一个链接的第一段,了解使用Layout Manager的优势。

什么,你只需要做的就是用这个啄:

JTextArea msgArea = new JTextArea(10, 10); 
msgArea.setWrapStyleWord(true); 
msgArea.setLineWrap(true);  

JScrollPane msgScroller = new JScrollPane();   
msgScroller.setBorder(
    BorderFactory.createTitledBorder("Messages")); 
msgScroller.setViewportView(msgArea); 

panelObject.add(msgScroller); 

这里是你的理解的小程序:

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

public class JTextAreaScroller 
{ 
    private JTextArea msgArea; 
    private JScrollPane msgScroller; 
    private JTextArea logArea; 
    private JScrollPane logScroller; 
    private JButton sendButton; 
    private JButton terminateButton; 
    private Timer timer; 
    private int counter = 0; 
    private String[] messages = { 
            "Hello there\n", 
            "How you doing ?\n", 
            "This is a very long text that might won't fit in a single line :-)\n", 
            "Okay just to occupy more space, it's another line.\n", 
            "Don't read too much of the messages, instead work on the solution.\n", 
            "Byee byee :-)\n", 
            "Cheers\n" 
           }; 

    private ActionListener timerAction = new ActionListener() 
    { 
     @Override 
     public void actionPerformed(ActionEvent ae) 
     { 
      if (counter < messages.length) 
       msgArea.append(messages[counter++]); 
      else 
       counter = 0; 
     } 
    }; 

    private void displayGUI() 
    { 
     JFrame frame = new JFrame("Chat Messenger Dummy"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JPanel contentPane = new JPanel(); 
     contentPane.setLayout(new BorderLayout(5, 5)); 

     JPanel centerPanel = new JPanel(); 
     centerPanel.setLayout(new GridLayout(0, 1, 5, 5)); 

     logArea = new JTextArea(10, 10); 
     logArea.setWrapStyleWord(true); 
     logArea.setLineWrap(true);  

     logScroller = new JScrollPane();   
     logScroller.setBorder(
      BorderFactory.createTitledBorder("Chat Log")); 
     logScroller.setViewportView(logArea); 

     msgArea = new JTextArea(10, 10); 
     msgArea.setWrapStyleWord(true); 
     msgArea.setLineWrap(true);  

     msgScroller = new JScrollPane();   
     msgScroller.setBorder(
      BorderFactory.createTitledBorder("Messages")); 
     msgScroller.setViewportView(msgArea); 

     centerPanel.add(logScroller); 
     centerPanel.add(msgScroller); 

     JPanel bottomPanel = new JPanel(); 

     terminateButton = new JButton("Terminate Session"); 
     terminateButton.addActionListener(new ActionListener() 
     { 
      @Override 
      public void actionPerformed(ActionEvent ae) 
      { 
       if (timer.isRunning()) 
        timer.stop(); 
       else 
        timer.start(); 
      } 
     }); 
     sendButton = new JButton("Send"); 

     bottomPanel.add(terminateButton); 
     bottomPanel.add(sendButton); 

     contentPane.add(centerPanel, BorderLayout.CENTER); 
     contentPane.add(bottomPanel, BorderLayout.PAGE_END); 

     frame.setContentPane(contentPane); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 

     timer = new Timer(1000, timerAction); 
     timer.start(); 
    } 

    public static void main(String... args) 
    { 
     EventQueue.invokeLater(new Runnable() 
     { 
      @Override 
      public void run() 
      { 
       new JTextAreaScroller().displayGUI(); 
      } 
     }); 
    } 
} 

这里是相同的结果:

JTEXTAREA SCROLLER