首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JMenuBar上的组件

JMenuBar上的组件
EN

Stack Overflow用户
提问于 2015-11-21 10:04:35
回答 1查看 51关注 0票数 0

我正在寻找一种方法来更改JMenuBar上组件的图形。

我有下面的JMenuBar

代码语言:javascript
复制
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 (为爆炸的屏幕截图表示歉意)

如您所见,JMenuBar上有一个JLabel和一个JCheckBox。我将如何改变JCheckBox的背景,使其周围没有一个与JMenuBar的标准外观不同的方块。

我尝试过以下代码,但至今没有成功。

代码语言:javascript
复制
chkbtnSmartSize.setBackground(this.getBackground());

(在不同的尝试中)

代码语言:javascript
复制
chkbtnSmartSize.setBackground(lblSmartSize.getBackground());

任何帮助完成这一任务将不胜感激。

谢谢,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-21 12:34:36

事实证明有几种方法可以做到这一点。

最简单的方法是移除组件的边框和背景。例如,使用此复选框,我应该这样做。

代码语言:javascript
复制
chkbtnSmartSize.setOpaque(false);
chkbtnSmartSize.setContentAreaFilled(false);
chkbtnSmartSize.setBorder(null);
chkbtnSmartSize.setFocusable(false);

另一种方法是更改JMenuBar的背景,然后对复选框执行相同的操作。

代码语言:javascript
复制
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背景的相同颜色,则会产生与第一种方法相同的影响。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33842046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档