2012-03-15 3 views
1

Я пытаюсь увеличить объем пространства, доступного для содержимого табуляции.Могу ли я иметь JTabbedPane с JMenuBar?

Как я могу поместить панель меню или ее эквивалент рядом со списком вкладок? (Предпочтительнее слева от вкладок, напротив изображения)

TabbedPaneDemo with red arrow

ответ

3

Вы можете использовать JideTabbedPane из Jide.

Jide является Commerical библиотека, но это JideTabbedPane класс с открытым исходным кодом, получить исходный код здесь: http://java.net/projects/jide-oss/

скриншот как ниже. enter image description here

3

нет, непосредственно не представляется возможным без переопределения всего BacisTabbedPaneUI, все примеры различного качества (смотреть и чувствовать себя и родной ОС очень чувствительный), very good example by aephyr,

мой взгляд JTabbedPane является *** JComponent, смешной пример по инвентарем GlassPane (вы установили некоторые границы для JMenuBar, например, поднятый etchech границу & линии ??? :-)

сумасшедший и грязный хак

enter image description here

enter image description here

из кода

import java.awt.ComponentOrientation; 
import java.awt.Container; 
import java.awt.Dimension; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.Insets; 
import java.awt.Rectangle; 
import javax.swing.Box; 
import javax.swing.JFrame; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 
import javax.swing.JPanel; 
import javax.swing.JTabbedPane; 
import javax.swing.SwingUtilities; 

public class TabbedPaneWithManuBar { 

    public void makeUI() { 
     JTabbedPane tabbedPane = new JTabbedPane(); 
     tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT); 
     for (int i = 0; i < 20; i++) { 
      JPanel panel = new JPanel(); 
      panel.setName("tab" + (i + 1)); 
      panel.setPreferredSize(new Dimension(600, 100)); 
      tabbedPane.add(panel); 
     } 
     JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(tabbedPane); 
     frame.pack(); 
     Rectangle tabBounds = tabbedPane.getBoundsAt(0); 
     Container glassPane = (Container) frame.getRootPane().getGlassPane(); 
     glassPane.setVisible(true); 
     glassPane.setLayout(new GridBagLayout()); 
     GridBagConstraints gbc = new GridBagConstraints(); 
     gbc.weightx = 1.0; 
     gbc.weighty = 1.0; 
     gbc.fill = GridBagConstraints.NONE; 
     gbc.insets = new Insets(tabBounds.y + 23, 0, 0, 5); 
     gbc.anchor = GridBagConstraints.NORTHEAST; 
     JMenuBar menuBar = new JMenuBar(); 
     menuBar.add(createMenu("Menu Example 1")); 
     menuBar.add(createMenu("Menu Example 1")); 
     menuBar.add(createMenu("Menu Example 1")); 
     menuBar.add(Box.createHorizontalGlue()); 
     menuBar.add(createMenu("About")); 
     menuBar.setPreferredSize(new Dimension(menuBar.getPreferredSize().width , (int) tabBounds.getHeight() - 2)); 
     glassPane.add(menuBar, gbc); 
     //JButton button = new JButton("My Button Position"); 
     //button.setPreferredSize(new Dimension(button.getPreferredSize().width, (int) tabBounds.getHeight() - 2)); 
     //glassPane.add(button, gbc); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    private JMenu createMenu(String title) { 
     JMenu m = new JMenu(title); 
     m.add("Menu item #1 in " + title); 
     m.add("Menu item #2 in " + title); 
     m.add("Menu item #3 in " + title); 
     if (title.equals("About")) { 
      m.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); 
     } 
     return m; 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new TabbedPaneWithManuBar().makeUI(); 
      } 
     }); 
    } 
} 
+0

@Ofek Рон 1. Использование надлежащего LayoutManager для Glasspane, 2. затем (например), вы можете охватывающих все необходимые Прямоугольник из ConttentPane, (чтобы увидеть мою JTabbedPane с плавающим JMenu положил в GlassPane) 3. Поместите в GLassPane некоторый JComponent (JPanel или nonopaque JLabel с backgroung или Icon), которые поддерживают trapsparency или transluceny (лучше) 4. Код для RootPane ошибочен (jPanel.add (jRootPane); - зачем создавать новый ContentPane) 5. не запускает ваш код, не является причиной для удаленной записи – mKorbel

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