【问题标题】:Tabed pane with a label on top顶部带有标签的选项卡式窗格
【发布时间】:2013-03-06 14:15:14
【问题描述】:

我需要添加一个 JLabel/JPanel,如图所示。在调整框架大小时,选项卡式窗格和标签/面板都应该驻留。选项卡式窗格内的标签和面板是独立的。我该怎么做?

【问题讨论】:

    标签: java swing user-interface overlay jtabbedpane


    【解决方案1】:

    这是一个使用 JLayer 的快速示例(由 mKorbel 建议):

    import java.awt.*;
    import javax.swing.*;
    import javax.swing.plaf.*;
    
    public class TopRightCornerLabelLayerUITest {
      public static JComponent makeUI() {
        JTabbedPane tab = new JTabbedPane();
        tab.addTab("New tab1", new JLabel("1"));
        tab.addTab("New Tab2", new JLabel("2"));
        JPanel p = new JPanel(new BorderLayout());
        p.add(new JLayer<JComponent>(tab, new TopRightCornerLabelLayerUI()));
        return p;
      }
      private static void createAndShowUI() {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.getContentPane().add(makeUI());
        f.setSize(320, 240);
        f.setLocationRelativeTo(null);
        f.setVisible(true);
      }
      public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
          @Override public void run() {
            createAndShowUI();
          }
        });
      }
    }
    class TopRightCornerLabelLayerUI extends LayerUI<JComponent> {
      private JLabel l = new JLabel("A Label at right corner");
      private JPanel rubberStamp = new JPanel();
      @Override public void paint(Graphics g, JComponent c) {
        super.paint(g, c);
        Dimension d = l.getPreferredSize();
        int x = c.getWidth() - d.width - 5;
        SwingUtilities.paintComponent(g, l, rubberStamp, x, 2, d.width, d.height);
      }
    }
    

    【讨论】:

    • 太棒了!!工作...非常感谢
    • 你能告诉我如何在这个标签上添加一个 JPopupMenu(“右角的一个标签”)来在这个标签上添加一些菜单项。拜托了
    • 我猜你可能想要覆盖 LayerUI#processMouseEvent(MouseEvent e, JLayer l) 并这样做:if(labelRect.contains(pt) &amp;&amp; e.isPopupTrigger()) popup.show(tabbedPane, pt.x, pt.y);
    【解决方案2】:

    我需要添加一个 JLabel/JPanel,如图所示。调整大小时 框架选项卡式窗格和标签/面板都应该驻留。这 标签和选项卡式窗格内的面板是独立的..如果有 有人有解决办法,请帮帮我。

    你可以使用:

    1. JLayer (Java7) based on JXLayer(Java6)

    2. GlassPane,for example


    如果可能,我会使用 JLayer(需要 Java7)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      相关资源
      最近更新 更多