나는 BasicMenuUI
을 확장하고 getPreferredSize(JComponent c)
을 초과하므로 JMenu
의 텍스트는 더 이상 가운데에 있지 않습니다.JMenu의 텍스트가 가운데에 맞춰지지 않음
여러 setAlignment
방법을 사용하여 수정하려고했지만 아무런 효과가 없었습니다.
나는 모든 메뉴에 대해 동일한 크기를 갖고 텍스트 중심에 놓고 싶습니다.
감사합니다.
나는 BasicMenuUI
을 확장하고 getPreferredSize(JComponent c)
을 초과하므로 JMenu
의 텍스트는 더 이상 가운데에 있지 않습니다.JMenu의 텍스트가 가운데에 맞춰지지 않음
여러 setAlignment
방법을 사용하여 수정하려고했지만 아무런 효과가 없었습니다.
나는 모든 메뉴에 대해 동일한 크기를 갖고 텍스트 중심에 놓고 싶습니다.
감사합니다.
BasicMenuItemUI
에서 상속 된 getPreferredSize()
은 "모양과 느낌에 적합합니다"라고되어 있습니다. 각 L & F는 다른 크기의 장식을 사용합니다. 그렇게하지 않으면 null
을 반환하고 "구성 요소의 레이아웃 관리자"를 지정해야합니다.
당연히 sscce이 도움이됩니다.
부록 :
JMenu를의 텍스트가 더 이상 중앙에 있지 않습니다.
나는 중심에 있다고 생각하지 않지만 원하는 경우 textRect
을 이동할 수 있습니다.
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);
}
}
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);
}
}
코드 다시 포맷; 잘못된 경우 되돌려주십시오. 이것은 당신의 질문에 대한 업데이트가되어야합니다. – trashgod