2015-11-21 2 views
0

Я ищу способ изменить графику компоненты на JMenuBarкомпоненты на JMenuBar

У меня есть следующие JMenuBar.

package GUIMain; 

import javax.swing.*; 
import java.awt.*; 

public class MyMenuBar extends JMenuBar 
{ 
    int fontMetrics; 
    FontMetrics fM; 

    JLabel lblSmartSize = new JLabel("", SwingConstants.CENTER); 
    JCheckBox chkbtnSmartSize = new JCheckBox(); 

    SortsGui sG; 

    public MyMenuBar(SortsGui sG) 
    { 
     this.sG = sG; 
     setBorderPainted(true); 
     makePopUpMenu(); 
    } 

    void makePopUpMenu() 
    { 
     add(Box.createHorizontalGlue()); 

     fM = lblSmartSize.getFontMetrics(lblSmartSize.getFont()); 
     fontMetrics = fM.stringWidth("Enable Smart Resizing?"); 
     lblSmartSize.setMinimumSize(new Dimension(fontMetrics+10,25)); 
     lblSmartSize.setPreferredSize(new Dimension(fontMetrics+10,25)); 
     lblSmartSize.setMaximumSize(new Dimension(fontMetrics+10,25)); 
     add(lblSmartSize); 

     chkbtnSmartSize.setBackground(lblSmartSize.getBackground()); 
     add(chkbtnSmartSize); 
    } 
} 

Это создает JMenuBar, который выглядит следующим образом (извинениями за взорванного скриншоте) Shows picture of the menu bar

Как вы можете видеть JMenuBar имеет JLabel и JCheckBox на нем. Как изменить фон JCheckBox так, чтобы он не имел квадрата вокруг него, который отличается от стандартного вида JMenuBar.

Я попытался следующий код и до сих пор не увенчались успехом

chkbtnSmartSize.setBackground(this.getBackground()); 

(С другой попытки)

chkbtnSmartSize.setBackground(lblSmartSize.getBackground()); 

Любая помощь в решении этого будет благодарные

Спасибо,

Dan

ответ

0

Оказывается, есть несколько способов сделать это.

Самый простой способ сделать это - удалить границу и фон компонента. Например, с этим флажком я должен сделать

chkbtnSmartSize.setOpaque(false); 
chkbtnSmartSize.setContentAreaFilled(false); 
chkbtnSmartSize.setBorder(null); 
chkbtnSmartSize.setFocusable(false); 

Другим способом изменить цвет фона в JMenuBar, а затем сделать то же самое для флажка.

Color color = Color.red; 
@Override //This Method changes the background colour of the JMenuBar 
protected void paintComponent(Graphics g) { 

    super.paintComponent(g); 

    Graphics2D g2d = (Graphics2D) g; 
    g2d.setColor(color); 
    g2d.fillRect(0, 0, getWidth() - 1, getHeight() - 1); 

} 
... 
chkbtnSmartSize.setBackground(color); 

Если убрать фон флажка и изменить цвет JMenuBar вам не нужна строка кода chkbtnSmartSize.setBackground(color);

Наконец, если вы установите на фоне JComponent к тому же цвету на фоне JMenuBar он будет иметь тот же эффект, что и первый метод.