2016-09-24 77 views
-1

我只鍵入了任何不適合的文本,而JScrollPane不起作用。一般來說,它不顯示文本區域。在JScrollPane中放置JLabel

textArea = new JTextArea("asdfsdfsdfsdfsdfasdfsdfsdfsdfsdfasdfsdfsdfsdfsdfasdfsdfsdfsdfs"); 
textArea.setBounds(20, 400, 130, 30); 
textArea.setFont(new Font("SansSerif", Font.BOLD, 20)); 
panelHome.add(new JScrollPane(textArea)); 

回答

2

如果你想在jscroll使用texarea,你應該使用類似的解決方案:

jScrollPane1 = new javax.swing.JScrollPane(); 
    jTextArea1 = new javax.swing.JTextArea(); 

    jTextArea1.setColumns(20); 
    jTextArea1.setRows(5); 
    jScrollPane1.setViewportView(jTextArea1); 
+0

不工作'TEXTAREA =新的JTextArea( 「asdfsdfsdfsdfsdfasdfsdfsdfsdfsdfasdfsdfsdfsdfsdfasdfsdfsdfsdfsdfasdfsdfsdfsdfsdfasdfsdfsdfsdfsdfasdfsdfsdfsdfsdf」); \t \t \t \t \t \t \t \t JScrollPane的滾動=新JScrollPane的(); \t \t \t \t textArea.setColumns(20); \t \t \t \t textArea.setRows(5); \t \t \t \t scroll.setViewportView(textArea); \t \t \t \t \t \t \t \t panelHome.add(滾動);' –

+0

@ Q.One:如果你的代碼不能正常工作,顯示更新的代碼作爲編輯你的問題,但最好的,如果它是一個小工作計劃,[mcve]或[sscce](http://sscce.org)(請查看鏈接)。 –

2

你的問題是在這裏:

textArea.setBounds(20, 400, 130, 30); 

你約束的JTextArea的大小無論它具有什麼文本,都是130乘30,並且這樣做會阻止JScrollPane正常工作。你永遠不想設置你的Swing組件的大小(或者使用null佈局),而是用JTextArea來設置它的行和列。這將允許JTextArea在需要時擴展。

編輯:如user1722245 --- 1+提示他的回答。

請注意,我通常也會在我的JTextAreas上調用setLineWrap(true)setWrapStyleWord(true),以便在需要時將文本包裝到下一行。

此外,另一個重要因素是容器的佈局管理器,此處爲panelHome,您將添加您的JScrollPane,因爲這將影響它如何顯示JScrollPane及其內容。例如,在下面的代碼中,我將JTextArea的列和行屬性設置在其構造函數中,我設置文本區域換行策略,將其添加到JScrollPane的視口視圖,方法是將其傳遞到JScrollPane的構造函數中,然後將其添加到JScrollPane的視口視圖中我將JScrollPane添加到在CENTER位置使用的使用JPanel的BorderLayout。現在,當文本被附加到JTextArea時,它將顯示包裝文本並顯示滾動條,但僅在需要時顯示。

import java.awt.BorderLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.KeyEvent; 
import javax.swing.*; 

@SuppressWarnings("serial") 
public class TextAreaEg extends JPanel { 
    private static final int TEXTAREA_ROWS = 20; 
    private static final int TEXTAREA_COLUMNS = 40; 
    private static final String NONSENSE_TEXT = "Lorem ipsum dolor sit amet, " 
      + "consectetur adipiscing elit, sed do eiusmod tempor " 
      + "incididunt ut labore et dolore magna aliqua. Ut enim ad " 
      + "minim veniam, quis nostrud exercitation ullamco laboris " 
      + "nisi ut aliquip ex ea commodo consequat. Duis aute irure " 
      + "dolor in reprehenderit in voluptate velit esse cillum " 
      + "dolore eu fugiat nulla pariatur. Excepteur sint occaecat " 
      + "cupidatat non proident, sunt in culpa qui officia " 
      + "deserunt mollit anim id est laborum."; 

    private JTextArea textArea = new JTextArea(TEXTAREA_ROWS, TEXTAREA_COLUMNS); 

    public TextAreaEg() { 
     textArea.setLineWrap(true); 
     textArea.setWrapStyleWord(true);   
     JScrollPane scrollPane = new JScrollPane(textArea); 

     JButton addTextButton = new JButton(new AddTextAction("Add Text", KeyEvent.VK_A)); 
     JPanel buttonPanel = new JPanel(); 
     buttonPanel.add(addTextButton); 

     setLayout(new BorderLayout()); 
     add(scrollPane, BorderLayout.CENTER); 
     add(buttonPanel, BorderLayout.PAGE_END); 
    } 

    private class AddTextAction extends AbstractAction { 
     public AddTextAction(String name, int mnemonic) { 
      super(name); 
      putValue(MNEMONIC_KEY, mnemonic); 
     } 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      for (int i = 0; i < 5; i++) { 
       textArea.append(NONSENSE_TEXT + "\n"); 
      } 
     } 
    } 

    private static void createAndShowGui() { 
     TextAreaEg mainPanel = new TextAreaEg(); 

     JFrame frame = new JFrame("JTextArea Example"); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     frame.getContentPane().add(mainPanel); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(() -> createAndShowGui()); 
    } 
}