2013-03-18 5 views
2

Мне нужно добавить JLabel/JPanel, как показано на картинке. При изменении размера рамки должны сохраняться как панели с вкладками, так и метка/панель. Метка и панель внутри панели с вкладками независимы. Как я могу это сделать?Табличка с надписью сверху

enter image description here

ответ

2

Вот краткий пример использования 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); 
    } 
} 
+0

Отлично !! Работайте ... Большое спасибо – Abin

+0

Не могли бы вы рассказать мне, как добавить JPopupMenu на этот ярлык («Ярлык в правом углу»), чтобы добавить некоторые элементы меню на эту метку. pleaseee – Abin

+0

Возможно, вы захотите переопределить 'LayerUI # processMouseEvent (MouseEvent e, JLayer l)' и сделать это следующим образом: 'if (labelRect.contains (pt) && e.isPopupTrigger()) popup.show (tabbedPane, pt .x, pt.y); – aterai

2

Мне нужно добавить JLabel/JPanel, как показано на рисунке. При изменении размера рамки должны отображаться как панели с вкладками, так и этикетка/панель. Маркировка и панель внутри панели с вкладками являются независимыми. Если у любого есть решение, пожалуйста, помогите мне.

Вы можете использовать:

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

  2. GlassPane, for example


Я хотел бы использовать JLayer, если это возможно (требуется Java7).

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