2016-02-06 44 views
0

我是Java Swing中的業餘愛好者,無法解決以下問題。JTextArea在添加JScrollPane時消失

只要我將JScrollPane添加到JTextArea,在GUI中就不會看到任何組件。

我知道,我不應該添加文本區域,當我添加它的滾動(我評論說,線),但它沒有幫助。

frame = new JFrame(); 
    frame.setBounds(100, 100, 450, 300); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.getContentPane().setLayout(null); 

    JTextArea textArea = new JTextArea(); 
    textArea.setBounds(213, 11, 186, 240); 
// NOT CALLING  frame.getContentPane().add(textArea); 
    scroll = new JScrollPane(textArea); 
    scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 

    frame.getContentPane().add(scroll); 

它的工作對我來說,只有當我用BorderLayout,但是這不是我想使用的佈局。
我的目標是在框架中放置幾個​​文本區域。

我該如何讓滾動顯示文本區域,例如AbsoluteLayoutnull)?

+1

您使用'setBounds()'與默認的'BorderLayout'衝突。請編輯您的問題以包含[mcve]。 – trashgod

+1

[爲什麼在SWING中使用空佈局會皺眉?](http://stackoverflow.com/questions/6592468/why-is-it-frowned-upon-to-use-a-null-layout-in -swing) – MadProgrammer

+1

避免使用'null'佈局,像素完美的佈局是現代UI設計中的幻想。影響組件的個體大小的因素太多,其中沒有一個可以控制。 Swing旨在與佈局經理一起工作,放棄這些將導致無法結束的問題和問題,您將花費越來越多的時間來嘗試糾正 – MadProgrammer

回答

4

您的框架使用空佈局。

您將滾動窗格添加到框架,但滾動窗格的大小爲(0,0),因此沒有任何內容需要繪製。

請勿使用空佈局。

Insteasd使用佈局管理器。然後,佈局管理器將管理每個組件的大小和位置,因此您不必這樣做。不要試圖重新發明輪子,因爲某種原因創建了佈局管理器,並且在使用JScrollPane/JTextArea時絕對沒有理由嘗試使用空佈局。

textArea.setBounds(213, 11, 186, 240); 

順便說一句,當你添加文本區域(或任何組件)到滾動窗格中的代碼不會做任何事。然後,滾動窗格使用其自己的佈局管理器並將覆蓋這些值。

JTextArea textArea = new JTextArea(); 

請勿使用類似的代碼來創建文本區域。相反,使用類似:

JTextArea textArea = new JTextArea(5, 30); 

現在文本區域可以決定自己的首選大小,並且可以通過佈局管理器可以使用這些信息。