У меня есть это в нескольких областях приложения, над которым я работаю, и я не вижу способа воспроизвести его за пределами этого приложения.Я не могу создать sscce, так как мне вообще не удается воспроизвести это - это наводит меня на мысль, что это должно быть что-то вызванное родительским фреймом / приложением, но я понятия не имею, где искать.
Я вижу, что часть левой части всплывающих меню не окрашена.Я вижу такое поведение с всплывающими окнами JCombobox, а также с JPopupMenu.Я приложил пару изображений, чтобы показать, что я имею в виду.ранее большинство из них работало должным образом, и без каких-либо изменений в коде, где создаются или отображаются всплывающие меню, эта проблема теперь распространилась на многие другие места.
Я не смешиваю тяжелые и легкие компоненты,поскольку мы используем только компоненты Swing, и два примера, которые я показываю ниже, находятся в совершенно разных частях приложения.Первый находится в довольно простой панели с очень малой функциональностью, но второй пример (JPoopupMenu) находится в очень сложной устаревшей панели.
И в том, и в другом месте, где я его вижу, я вообще не изменяю область отсечения родителя, и во всех случаях эти всплывающие окна создаются и отображаются в EDT.
Я знаю, что этот вопрос довольно расплывчатый, но это из-за характера проблемы.Я предоставлю любую запрошенную информацию.
Это особый случай, когда речь идет о пользовательской модели комбинированного списка, но мы видели это и при использовании DefaultComboBoxModel:
public class GroupListModel extends AbstractListModel
implements ComboBoxModel{
private List<groupObject> groups;
private groupObject selectedItem = null;
public GroupListModel() {
this(new ArrayList<groupObject>());
}
public GroupListModel(List<groupObject> groups) {
this.groups = groups;
}
@Override
public int getSize() {
return groups.size();
}
@Override
public Object getElementAt(int index) {
if(index>=groups.size()){
throw new IndexOutOfBoundsException();
}
return groups.get(index);
}
public void setGroups(List<groupObject> groups){
this.groups = groups;
fireContentsChanged(this, 0, groups.size());
}
public void addElement(groupObject group){
groups.add(group);
fireIntervalAdded(this, groups.size()-1, groups.size()-1);
}
public void addElement(groupObject group, int index){
groups.add(index, group);
fireIntervalAdded(this, index, index+1);
}
@Override
public void setSelectedItem(Object anItem) {
if(anItem instanceof groupObject){
selectedItem = (groupObject) anItem;
}else{
throw new IllegalArgumentException();
}
fireContentsChanged(this, 0, groups.size());
}
@Override
public Object getSelectedItem() {
return selectedItem;
}
Это JPopupMenu, которое отображается при щелчке правой кнопкой мыши по следующему коду:
public void mouseClicked(MouseEvent e) {
if( e.getButton()==e.BUTTON3 ){
lastClickedID = tmp.getUniqueID();
lastClickedGui = (bigEventGui) gui;
itmComplete.setText(
completed ?
ctOne.getLang("uncomplete") :
ctOne.getLang("complete") );
itmComplete.setIcon( (completed ?
iconFramework.getIcon(
iconFramework.UNCOMPLETE_ITEM,
24, false) :
iconFramework.getIcon(
iconFramework.COMPLETE_ITEM,
24, false) ));
popRCEvent.show(gui, e.getX(), e.getY() );
}