2011-03-22 3 views
0

나는 BasicMenuUI을 확장하고 getPreferredSize(JComponent c)을 초과하므로 JMenu의 텍스트는 더 이상 가운데에 있지 않습니다.JMenu의 텍스트가 가운데에 맞춰지지 않음

여러 setAlignment 방법을 사용하여 수정하려고했지만 아무런 효과가 없었습니다.

나는 모든 메뉴에 대해 동일한 크기를 갖고 텍스트 중심에 놓고 싶습니다.

감사합니다.

답변

0

BasicMenuItemUI에서 상속 된 getPreferredSize()은 "모양과 느낌에 적합합니다"라고되어 있습니다. 각 L & F는 다른 크기의 장식을 사용합니다. 그렇게하지 않으면 null을 반환하고 "구성 요소의 레이아웃 관리자"를 지정해야합니다.

당연히 sscce이 도움이됩니다.

부록 :

JMenu를의 텍스트가 더 이상 중앙에 있지 않습니다.

나는 중심에 있다고 생각하지 않지만 원하는 경우 textRect을 이동할 수 있습니다.

enter image description here

class CustomMenuUI extends BasicMenuUI { 

    public static ComponentUI createUI(JComponent c) { 
     return new CustomMenuUI(); 
    } 

    @Override 
    protected void paintText(Graphics g, JMenuItem menuItem, 
      Rectangle textRect, String text) { 
     g.setColor(Color.red); 
     int w2 = menuItem.getBounds().width/2; 
     textRect.translate(w2 - textRect.width/2, 0); 
     super.paintText(g, menuItem, textRect, text); 
    } 

    @Override 
    public Dimension getPreferredSize(JComponent c) { 
     return new Dimension(80, 32); 
    } 
} 
0
public class Main { 
    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      public void run() { 
       try { 
        UIManager.put("MenuUI", "testmenuui.CustomMenuUI"); 
        for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) { 
         if ("Nimbus".equals(info.getName())) { 
          UIManager.setLookAndFeel(info.getClassName()); 
          break; 
         } 
        } 
        createAndShowGui(); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 

    private static void createAndShowGui() { 
     JMenuBar menuBar = new JMenuBar(); 
     JMenu menuTest1 = new JMenu("Menu1"); 

     JMenu menuTest2 = new JMenu("Menu2"); 

     menuBar.add(menuTest1); 
     menuBar.add(menuTest2); 

     JFrame frame = new JFrame(); 
     frame.setJMenuBar(menuBar); 
     frame.setPreferredSize(new Dimension(800, 600)); 
     frame.pack(); 
     frame.setVisible(true); 
    } 
} 

class CustomMenuUI extends BasicMenuUI { 

    public static ComponentUI createUI(JComponent c) { 
     return new CustomMenuUI(); 
    } 

    @Override 
    protected void paintBackground(Graphics g, JMenuItem menuItem, Color bgColor) { 
     g.setColor(Color.black); 
     super.paintBackground(g, menuItem, bgColor); 
    } 

    @Override 
    protected void paintText(Graphics g, JMenuItem menuItem, Rectangle textRect, String text) { 
     g.setColor(Color.white); 
     super.paintText(g, menuItem, textRect, text); 
    } 

    @Override 
    public Dimension getPreferredSize(JComponent c) { 
     return new Dimension(100, 100); 
    } 
} 
+0

코드 다시 포맷; 잘못된 경우 되돌려주십시오. 이것은 당신의 질문에 대한 업데이트가되어야합니다. – trashgod