2013-03-28 2 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

Кто-нибудь знает, что я делать неправильно и как я могу это исправить? Благодарю.

EDIT: Чтобы быть ясным, я ищу, чтобы область текста была ниже JTabbedPane, а не на вкладке iself.

Использование BorderLayout.NORTH и BorderLayout.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

Вы хотите 'JTextArea' за' JTabbedPane'? –

+0

Я ищу его под JTabbedPane, а не внутри содержимого вкладки. Таким образом, это будет выглядеть так: Панель меню -> Список вкладок -> Содержание вкладки -> Текстовая область, если этот список был вертикальным порядком компонентов. – Dan

+0

Позвольте мне уточнить .. Вы хотите, чтобы 'JTextArea' добавлялся в' 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); 

EDIT: иметь панель прокрутки ниже вкладками панели:

...

add(tabbedPane, BorderLayout.NORTH); 

...

add(scrollableTextArea, BorderLayout.SOUTH); 

Надеюсь, это сработает для вас.

+0

Извините, я, возможно, не уточнил свой вопрос.То, что я ищу, - это область текста, которая будет находиться под самой JTabbedPane, позже я добавлю некоторые вещи в вкладки. – Dan

+0

Под или ниже? :) –

+0

Я полагаю, что ниже, вероятно, было бы яснее сказать. Извините, если я не объясню это очень хорошо. Что я сказал в другом комментарии: «Строка меню -> Список вкладок -> Содержание вкладки -> Текстовая область, если этот список был вертикальным порядком компонентов». Надеюсь, что это поможет сделать его более ясным. – Dan

Смежные вопросы