【发布时间】:2016-01-22 04:32:23
【问题描述】:
这是我添加新组件的代码:
addButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if (!todoListInput.getText().equals("")) {
JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT));
panel.setBackground(new Color(213, 134, 145, 55));
JCheckBox checkBox = new JCheckBox("");
checkBox.setOpaque(false);
checkBox.setForeground(Color.WHITE);
//checkBox.setBorder(line);
panel.add(checkBox);
Border border = new LineBorder(Color.GRAY, 1, true);
Border margin = new EmptyBorder(10,10,10,10);
panel.setBorder(new CompoundBorder(margin, border));
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridwidth = GridBagConstraints.REMAINDER;
gbc.weightx = 1;
gbc.fill = GridBagConstraints.HORIZONTAL;
mainList.add(panel, gbc, 0);
validate();
repaint();
todoListInput.setText("");
}
}
});
我的问题是,当我对复选框执行“onmouseover”操作时,整个 jFrame 的一部分将出现在复选框后面
我发现这只在我执行 checkBox.setOpaque(false) 或 checkBox.setBackground(new Color(122,122,122,55)) 时出现。
我可以知道我的代码有什么问题吗?
【问题讨论】:
-
你的问题在这里
panel.setBackground(new Color(213, 134, 145, 55));。 Swing 不知道如何处理基于 alpha 的背景颜色,它只处理完全不透明或透明的组件。为了让它工作,你需要伪造它,通过使组件完全透明并在组件paintComponent方法中绘制半透明颜色 -
例如 this 之类的东西