2013-03-28 24 views
0

我想設計一個JTabbedPane在框架頂部,然後在選項卡式窗格下面的jLogArea的佈局。如何阻止JTextArea被放置在JTabbedPane之上?

我使用這個代碼:

setLayout(new BorderLayout()); 

tabbedPane.setSize(WIDTH, HEIGHT); 
add(tabbedPane, BorderLayout.PAGE_START); 
tabbedPane.add("Tab 0", null); 

scrollableTextArea = new JScrollPane(jTextArea); 

jTextArea.setEditable(false); 
jTextArea.setLineWrap(true); 
scrollableTextArea.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 
scrollableTextArea.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); 
add(scrollableTextArea, BorderLayout.PAGE_END); 

然而,這樣做的結果是,文本區域被放置在標籤面板背後:

enter image description here

有誰知道我是什麼做錯了,我該如何解決它?謝謝。

編輯:只是要清楚,我正在尋找文本區域下面的JTabbedPane,而不是在標籤本身。使用BorderLayout.NORTHBorderLayout.SOUTH也沒有幫助。我加了一個標籤爲標籤的內容只是爲了看看是否能夠有所作爲,但文本區域還行後面,這是它的外觀:

enter image description here

而且代碼(類擴展JFrame):

public MainGUI() { 
    init(); 
    pack(); 
    super.setTitle("test"); 
} 

public void init() { 
    setLayout(new BorderLayout()); 
    setPreferredSize(new Dimension(WIDTH, HEIGHT + TEXT_AREA_HEIGHT)); 
    setMaximumSize(new Dimension(WIDTH, HEIGHT + TEXT_AREA_HEIGHT)); 
    setMinimumSize(new Dimension(WIDTH, HEIGHT + TEXT_AREA_HEIGHT)); 

    tabbedPane = new JTabbedPane(); 
    textArea = new JTextArea(WIDTH, TEXT_AREA_HEIGHT); 
    scrollableTextArea = new JScrollPane(textArea); 

    JLabel testLabel = new JLabel("Test!"); 
    tabbedPane.add("Tab 0", testLabel); 

    tabbedPane.setBorder(null); 
    tabbedPane.setSize(WIDTH, HEIGHT); 
    add(tabbedPane, BorderLayout.NORTH); 

    textArea.setEditable(false); 
    textArea.setLineWrap(true); 
    scrollableTextArea.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 
    scrollableTextArea.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); 
    add(scrollableTextArea, BorderLayout.SOUTH); 

    setDefaultCloseOperation(EXIT_ON_CLOSE); 

    setResizable(false); 
    setVisible(true); 
} 

回答

1

UPDATE
我認爲你正在尋找的東西是這樣的:
enter image description here

import java.awt.BorderLayout; 
import java.awt.Container; 

import javax.swing.JTextArea; 
import javax.swing.JScrollPane; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JSplitPane; 
import javax.swing.JTabbedPane; 

public class TabSample extends JFrame{ 
    public void createAndShowGUI() { 
    JPanel panel = new JPanel(); 
    JTextArea ta = new JTextArea(100,50); 
    JScrollPane jsp = new JScrollPane(ta); 
    JTabbedPane tabbedPane = new JTabbedPane(); 
    panel.setLayout(new BorderLayout()); 
    tabbedPane.addTab("Tab one", panel); 
    JSplitPane vPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, tabbedPane, jsp); 
    getContentPane().add(vPane); 
    setSize(400,500); 
    vPane.setDividerLocation(getHeight()/2); 
    setLocationRelativeTo(null); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setVisible(true); 
    } 

    public static void main(String args[]) 
    { 
     javax.swing.SwingUtilities.invokeLater(new Runnable() 
     { 
      @Override 
      public void run() 
      { 
       TabSample ts = new TabSample(); 
       ts.createAndShowGUI(); 
      } 
     }); 
    } 
} 
+0

你想'JTabbedPane'背後的'JTextArea'? –

+0

我正在尋找它在JTabbedPane下,而不是在標籤的內容。所以它會是這樣的:如果該列表是組件的垂直順序,則菜單欄 - >選項卡列表 - >標籤內容 - >文本區域。 – Dan

+0

讓我澄清一下..你想要一個'JTextArea'被添加到它的'South'處的'JFrame' ..並且在'JFrame'中心的上面想要'JTabbedPane'被添加..對嗎? –

0

您的代碼應該是這樣的:

setLayout(new BorderLayout()); 

tabbedPane.setSize(WIDTH, HEIGHT); 
add(tabbedPane, BorderLayout.PAGE_START); 

scrollableTextArea = new JScrollPane(jTextArea); 

jTextArea.setEditable(false); 
jTextArea.setLineWrap(true); 
scrollableTextArea.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 
scrollableTextArea.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); 
tabbedPane.addTab("Tab 0", scrollableTextArea); 

在你的代碼的問題是,您添加的JScrollPane在同一水平已與您JTabbedPane。其實你JScrollPane必須有一個標籤組件:

tabbedPane.addTab("Tab 0", scrollableTextArea); 

編輯:有標籤窗格下面的滾動窗格:

...

add(tabbedPane, BorderLayout.NORTH); 

...

add(scrollableTextArea, BorderLayout.SOUTH); 

希望這適用於你。

+0

對不起,我可能沒有在我的問題中說清楚。我正在尋找的是JTabbedPane本身下方的文本區域,稍後我將在選項卡本身中添加一些內容。 – Dan

+0

下面或下面?:) –

+0

我想下面可能會更清楚地說。對不起,如果我沒有解釋得很好。我在其他評論中說的是:「菜單欄 - >選項卡列表 - >選項卡內容 - >文本區域,如果該列表是組件的垂直順序」。希望有助於使它更清晰。 – Dan