2013-03-18 2 views
2

이미지에 표시된대로 JLabel/JPanel을 추가해야합니다. 프레임 크기를 조정할 때 탭 패널과 레이블/패널이 모두 있어야합니다. 탭 패널 내부의 레이블과 패널은 독립적입니다. 어떻게해야합니까? 그림과 같이상단에 레이블이있는 탭이있는 패널

enter image description here

답변

2

여기 (mKorbel에 의해 제안) JLayer를 사용하는 간단한 예입니다

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

대! Working ... Thanks a lot – Abin

+0

이 레이블에 메뉴 항목을 추가하기 위해이 레이블 ("오른쪽 모서리의 레이블")에 JPopupMenu를 추가하는 방법을 알려주십시오. pleaseee – Abin

+0

'LayerUI # processMouseEvent (MouseEvent e, JLayer l)'을 재정의 (override)하고 싶다면 다음과 같이하면됩니다 :'if (labelRect.contains (pt) && e.isPopupTrigger()) popup.show (tabbedPane, pt .x, pt.y); – aterai

2

나는 JLabel의/인 JPanel을 추가해야합니다. 프레임의 크기를 조정할 때 탭이있는 창과 레이블/패널이 모두 있어야합니다. 라벨과 탭 패널 내부의 패널은 독립적입니다. 에 해결책이있는 경우 도와주세요.

당신은 사용할 수 있습니다

  • JLayer (Java7) based on JXLayer(Java6)

  • 의 GlassPane

      ,


    가능하다면 내가 JLayer을 사용하십시오 for example이 (Java7 필요).

  • 관련 문제