Вот мои коды для добавления нового компонента:
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 не знает, как работать с фоновыми цветами на основе альфа-канала, он работает только с полностью непрозрачными или прозрачными компонентами. Чтобы заставить его работать, вам нужно подделать его, сделав компонент полностью прозрачным и закрасив полупрозрачный цвет в методе компонентовpaintComponent
- person MadProgrammer   schedule 22.01.2016