JMenuBar 上的组件
Components on the 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
看起来像这样(对于放大的屏幕截图表示歉意)
如您所见,JMenuBar
上有一个 JLabel
和一个 JCheckBox
。我将如何更改 JCheckBox
的背景,使其周围没有正方形,这与 JMenuBar
.
的标准外观不同
我已经尝试了下面的代码,但到目前为止都没有成功
chkbtnSmartSize.setBackground(this.getBackground());
(另一次尝试)
chkbtnSmartSize.setBackground(lblSmartSize.getBackground());
如有任何帮助,我们将不胜感激
谢谢,
段
事实证明有几种方法可以做到这一点。
最简单的方法是删除组件的边框和背景。例如,我应该使用此复选框
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
的背景相同的颜色,它将产生与第一种方法相同的效果。
我正在寻找一种方法来更改 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
看起来像这样(对于放大的屏幕截图表示歉意)
如您所见,JMenuBar
上有一个 JLabel
和一个 JCheckBox
。我将如何更改 JCheckBox
的背景,使其周围没有正方形,这与 JMenuBar
.
我已经尝试了下面的代码,但到目前为止都没有成功
chkbtnSmartSize.setBackground(this.getBackground());
(另一次尝试)
chkbtnSmartSize.setBackground(lblSmartSize.getBackground());
如有任何帮助,我们将不胜感激
谢谢,
段
事实证明有几种方法可以做到这一点。
最简单的方法是删除组件的边框和背景。例如,我应该使用此复选框
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
的背景相同的颜色,它将产生与第一种方法相同的效果。