Как разместить компоненты под вкладками в JTabbedPane с правильной ориентацией - PullRequest
3 голосов
/ 29 марта 2011

Так что я просто наткнулся на размещение вкладок в JTabbedPane справа и слева (то есть setTabPlacement(JTabbedPane.RIGHT)), который мне нравится. Что мне нужно, это использовать пространство, которое это оставляет под вкладками. В настоящее время у меня есть столбец JButtons, но они отодвигаются в сторону, оставляя много пустого пространства.

Есть мысли о том, как это сделать? Какое-то пользовательское наложение или что-то?

Вот скриншот . В коде у меня в основном один горизонтально выровненный блок с JTabbedPane над JTree, затем столбец кнопок после этого.

boxOfEverything.add(tabbedPane);
boxOfEverything.add(boxColumnButtons);

Снимок экрана здесь .

1 Ответ

1 голос
/ 07 апреля 2011

Я сделал это сообщество вики , потому что этот ответ не мой.@cheesecamera, похоже, разместил тот же вопрос на другом форуме и получил там ответ.Я скопировал ответ, чтобы люди, приходящие сюда в поисках ответа, могли получить ответ.

Идея состоит в том, чтобы использовать свинг glasspane.

import java.awt.*;
import javax.swing.*;

public class RightTabPaneButtonPanel {

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

      @Override
      public void run() {
        new RightTabPaneButtonPanel().makeUI();
      }
    });
  }

  public void makeUI() {
    JTabbedPane tabbedPane = new JTabbedPane();
    tabbedPane.setTabPlacement(JTabbedPane.RIGHT);
    JPanel panel = new JPanel(new GridLayout(0, 1));

    for (int i = 0; i < 3; i++) {
      JPanel tab = new JPanel();
      tab.setName("tab" + (i + 1));
      tab.setPreferredSize(new Dimension(400, 400));
      tabbedPane.add(tab);

      JButton button = new JButton("B" + (i + 1));
      button.setMargin(new Insets(0, 0, 0, 0));
      panel.add(button);
    }

    JFrame frame = new JFrame();
    frame.add(tabbedPane);
    frame.pack();
    Rectangle tabBounds = tabbedPane.getBoundsAt(0);

    Container glassPane = (Container) frame.getGlassPane();
    glassPane.setVisible(true);
    glassPane.setLayout(new GridBagLayout());
    GridBagConstraints gbc = new GridBagConstraints();
    gbc.weightx = 1.0;
    gbc.weighty = 1.0;
    gbc.fill = GridBagConstraints.NONE;
    int margin = tabbedPane.getWidth() - (tabBounds.x + tabBounds.width);
    gbc.insets = new Insets(0, 0, 0, margin);
    gbc.anchor = GridBagConstraints.SOUTHEAST;

    panel.setPreferredSize(new Dimension((int) tabBounds.getWidth() - margin,
            panel.getPreferredSize().height));
    glassPane.add(panel, gbc);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
  }
}
...