Качающиеся всплывающие меню не полностью окрашены - PullRequest
2 голосов
/ 06 мая 2011

У меня есть это в нескольких областях приложения, над которым я работаю, и я не вижу способа воспроизвести его за пределами этого приложения.Я не могу создать sscce, так как мне вообще не удается воспроизвести это - это наводит меня на мысль, что это должно быть что-то вызванное родительским фреймом / приложением, но я понятия не имею, где искать.

Я вижу, что часть левой части всплывающих меню не окрашена.Я вижу такое поведение с всплывающими окнами JCombobox, а также с JPopupMenu.Я приложил пару изображений, чтобы показать, что я имею в виду.ранее большинство из них работало должным образом, и без каких-либо изменений в коде, где создаются или отображаются всплывающие меню, эта проблема теперь распространилась на многие другие места.

Я не смешиваю тяжелые и легкие компоненты,поскольку мы используем только компоненты Swing, и два примера, которые я показываю ниже, находятся в совершенно разных частях приложения.Первый находится в довольно простой панели с очень малой функциональностью, но второй пример (JPoopupMenu) находится в очень сложной устаревшей панели.

И в том, и в другом месте, где я его вижу, я вообще не изменяю область отсечения родителя, и во всех случаях эти всплывающие окна создаются и отображаются в EDT.

Я знаю, что этот вопрос довольно расплывчатый, но это из-за характера проблемы.Я предоставлю любую запрошенную информацию.

JComboBox popup issue Это особый случай, когда речь идет о пользовательской модели комбинированного списка, но мы видели это и при использовании 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, которое отображается при щелчке правой кнопкой мыши по следующему коду: JPopupMenu paint problem

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() );
                            }

1 Ответ

1 голос
/ 06 мая 2011

Удаление JPopupMenu.setDefaultLightWeightPopupEnabled (false); исправил ... Может кто-нибудь, пожалуйста, попытайтесь объяснить, почему?

...