У меня были проблемы с прозрачностью JCombobox, используя Color (p, p, p, p).как только я нажимаю на нее, все отображаемые параметры, кажется, выбираются курсором, когда он находится только на одном из них.и иногда другие кнопки появляются за компонентом de прозрачности, но они не позади него.
Прозрачность действительно работает, но я не хочу, чтобы она выглядела ошибочной, я пытался использовать метод paintComponents ()с заливкой прямоугольника, и он работал только для jcombobox, когда его параметры не отображаются, он кажется идеальным и не содержит ошибок, но как только я отображаю параметры комбинированного списка, кажется, что все они выделены и с тенями других компонентов позади них,Есть ли способ получить отображаемый компонент jcombobox, который содержит параметры, и установить непрозрачный фон или что-то для решения этой проблемы?
вот код панели, где у меня есть 3 кнопки с MyComboBoxи тестовый класс:
//========================== MYCOMBOBOX CLASS ===========================
package views;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JComboBox;
import models.EnumModels;
public class MyComboBox<E> extends JComboBox<E> {
public MyComboBox () {
setOpaque(false);
setBackground(new Color(18, 10, 44, 100));
}
protected void paintComponent(Graphics g)
{
g.setColor( getBackground() );
g.fillRect(0, 0, getWidth(), getHeight());
super.paintComponent(g);
}
}
//======================= PANEL WITH MYCOMBOBOX ====================
package views;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import controller.Actions;
import controller.EventsController;
import models.EnumModels;
public class CentralPanel extends JPanel{
MyButton info, add, recent, modelFilter;
boolean bool;
JTextField modelField;
MyComboBox<EnumModels> modelsBox;
public CentralPanel() {
setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));
setSize(600,845);
setOpaque(false);
setBackground(new Color(18, 10, 44, 100));
setBorder(BorderFactory.createLineBorder(Color.decode("#E80909"), 4, true));
JPanel infoPanel = new JPanel();
infoPanel.setLayout(new BorderLayout());
infoPanel.setBorder(BorderFactory.createEmptyBorder(100, 65, 0, 65));
JPanel addPanel = new JPanel();
addPanel.setLayout(new BorderLayout());
addPanel.setBorder(BorderFactory.createEmptyBorder(100, 65, 0, 65));
JPanel recentPanel = new JPanel();
recentPanel.setLayout(new BorderLayout());
recentPanel.setBorder(BorderFactory.createEmptyBorder(100, 65, 0, 65));
JPanel modelFilterPanel = new JPanel();
modelFilterPanel.setLayout(new BorderLayout());
modelFilterPanel.setBorder(BorderFactory.createEmptyBorder(100, 65, 65, 65));
info = new MyButton();
info.setFont(new Font("Unispace", Font.BOLD, 24));
info.setForeground(Color.decode("#E80909"));
info.setText("Información de Vehículos");
add = new MyButton();
add.setFont(new Font("Unispace", Font.BOLD, 24));
add.setForeground(Color.decode("#E80909"));
add.setText("Agregar Vehículo");
recent = new MyButton();
recent.setFont(new Font("Unispace", Font.BOLD, 24));
recent.setForeground(Color.decode("#E80909"));
recent.setText("Vehículos Recientes");
modelFilter = new MyButton();
modelFilter.setFont(new Font("Unispace", Font.BOLD, 24));
modelFilter.setForeground(Color.decode("#E80909"));
modelFilter.setText("Filtro de Modelo");
modelsBox = new MyComboBox<>();
DefaultComboBoxModel model = new DefaultComboBoxModel<>(EnumModels.values());
modelsBox.setModel(model);
// modelsBox.setBackground(new Color(18, 10, 44, 100));
modelsBox.setForeground(Color.decode("#8A7676"));
modelsBox.setFont(new Font("Unispace", Font.BOLD, 20));
((JLabel)modelsBox.getRenderer()).setHorizontalAlignment(SwingConstants.CENTER);
((JLabel)modelsBox.getRenderer()).setFocusable(false);
// ((JLabel)modelsBox.getRenderer()).setOpaque(false);
// ((JLabel)modelsBox.getRenderer()).setBackground(new Color(18, 10, 44,100));
info.addActionListener(EventsController.getInstance());
info.setActionCommand(Actions.MAIN_INFO.name());
add.addActionListener(EventsController.getInstance());
add.setActionCommand(Actions.MAIN_ADD.name());
recent.addActionListener(EventsController.getInstance());
recent.setActionCommand(Actions.MAIN_RECENT.name());
modelFilter.addActionListener(EventsController.getInstance());
modelFilter.setActionCommand(Actions.MAIN_FILTER.name());
infoPanel.add(info);
infoPanel.setOpaque(false);
addPanel.add(add);
addPanel.setOpaque(false);
recentPanel.add(recent);
recentPanel.setOpaque(false);
modelFilterPanel.add(modelsBox);
modelFilterPanel.setOpaque(false);
add(infoPanel);
add(addPanel);
add(recentPanel);
add(modelFilterPanel);
}
protected void paintComponent(Graphics g)
{
g.setColor( getBackground() );
g.fillRect(0, 0, getWidth(), getHeight());
super.paintComponent(g);
}
///================================ MAIN RUNNER ============================
package test;
import java.awt.Image;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import views.CentralPanel;
public class TestViews extends JFrame {
CentralPanel panel;
public TestViews() {
setExtendedState(MAXIMIZED_BOTH);
setDefaultCloseOperation(EXIT_ON_CLOSE);
panel = new CentralPanel();
add(panel);
setVisible(true);
}
public static void main(String[] args) {
new TestViews();
}
}
//================================ ENUM-COMBOBOX =============================
package models;
public enum EnumModels {
NOVENTA("1990"),NOVENTA_UNO("1991"),NOVENTA_DOS("1992"),NOVENTA_TRES("1993"),NOVENTA_CUATRO("1994"),NOVENTA_CINCO("1995"),NOVENTA_SEIS("1996"),NOVENTA_SIETE("1997"),NOVENTA_OCHO("1998"),NOVENTA_NUEVE("1999"),
DOSMIL_UNO("2001"),DOSMIL_DOS("2002"),DOSMIL_TRES("2003"),DOSMIL_CUATRO("2004"),DOSMIL_CINCO("2005"),DOSMIL_SEIS("2006"),DOSMIL_SIETE("2007"),DOSMIL_OCHO("2008"),DOSMIL_NUEVE("2009"),DOSMIL_DIEZ("2010"),DOSMIL_ONCE("2011"),
DOSMIL_DOCE("2012"),DOSMIL_TRECE("2013"),DOSMIL_CATORCE("2014"),DOSMIL_QUINCE("2015"),DOSMIL_DIEZ_Y_SEIS("2016"),DOSMIL_DIEZ_Y_SIETE("2017"),DOSMIL_DIEZ_Y_OCHO("2018"),DOSMIL_DIEZ_Y_NUEVE("2019"),DOSMIL_VEINTE("2020");
private String year;
public String getYear() {
return this.year;
}
private EnumModels(String year) {
this.year = year;
}
public String toString() {
return year;
}
}