Java 顶部带有标签的选项卡窗格

Java 顶部带有标签的选项卡窗格,java,swing,user-interface,overlay,jtabbedpane,Java,Swing,User Interface,Overlay,Jtabbedpane,我需要添加一个JLabel/JPanel,如图所示。调整框架大小时,选项卡式窗格和标签/面板都应保留。标签和选项卡式窗格内的面板是独立的。我该怎么做 我需要添加一个JLabel/JPanel,如图所示。在调整 框架选项卡式窗格和标签/面板均应放置。这个 标签和选项卡式窗格内的面板是独立的。。如果有的话 一有解决办法,请帮帮我 您可以使用: 玻璃板 如果可能的话,我会使用JLayer(需要Java7)。下面是一个使用JLayer的快速示例(正如mKorbel所建议的): import jav

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

我需要添加一个JLabel/JPanel,如图所示。在调整 框架选项卡式窗格和标签/面板均应放置。这个 标签和选项卡式窗格内的面板是独立的。。如果有的话 一有解决办法,请帮帮我

您可以使用:

  • 玻璃板



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

    下面是一个使用JLayer的快速示例(正如mKorbel所建议的):

    import java.awt.*;
    导入javax.swing.*;
    导入javax.swing.plaf.*;
    公共类TopRightCornerLabelLayerUITest{
    公共静态JComponent makeUI(){
    JTabbedPane选项卡=新建JTabbedPane();
    tab.addTab(“新tab1”,新JLabel(“1”));
    tab.addTab(“新Tab2”,新JLabel(“2”));
    JPanel p=newjpanel(newborderlayout());
    p、 添加(新的JLayer(选项卡,新的TopRightCornerLabelLayerUI());
    返回p;
    }
    私有静态void createAndShowUI(){
    JFrame f=新的JFrame();
    f、 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f、 getContentPane().add(makeUI());
    f、 设置大小(320240);
    f、 setLocationRelativeTo(空);
    f、 setVisible(真);
    }
    公共静态void main(字符串[]args){
    invokeLater(新的Runnable(){
    @重写公共无效运行(){
    createAndShowUI();
    }
    });
    }
    }
    类TopRightCornerLabelLayerUI扩展了LayerUI{
    私有JLabel l=新JLabel(“右角的标签”);
    private JPanel rubberStamp=新JPanel();
    @替代公共空白绘制(图形g、J组件c){
    超级油漆(g,c);
    维度d=l.getPreferredSize();
    intx=c.getWidth()-d.width-5;
    旋转度。油漆组件(g、l、橡胶垫、x、2、d.宽度、d.高度);
    }
    }
    
    太棒了!!工作…谢谢你能告诉我如何在这个标签上添加一个JPOPUPMENUS(“右角的标签”),在这个标签上添加一些菜单项吗。请注意,我猜您可能希望覆盖
    LayerUI#processMouseEvent(MouseEvent e,JLayer l)
    并这样做:
    if(labelRect.contains(pt)和&e.isPopupTrigger())popup.show(选项卡窗格,pt.x,pt.y)
    
    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);
      }
    }