2015-11-21 51 views
0

組件我正在尋找一種方式來改變一個JMenuBarJMenuBar上

我有以下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

正如你可以看到JMenuBarJLabel並在其上一個JCheckBox。我將如何更改JCheckBox的背景,以便其周圍沒有方形,與JMenuBar的標準外觀不同。

我曾嘗試下面的代碼和迄今未果

chkbtnSmartSize.setBackground(this.getBackground()); 

(在不同的嘗試)

chkbtnSmartSize.setBackground(lblSmartSize.getBackground()); 

在完成這將不勝感激

感謝任何幫助,

回答

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的顏色,如果你設置的JComponent的背景相同顏色的你不需要的代碼chkbtnSmartSize.setBackground(color);

最後行它的背景與第一種方法的效果相同。