제가 작업하고있는 앱의 여러 영역에이 기능이 있으며이 앱 외부에서 복제 할 방법이 없습니다. 나는 이것을 전혀 복제 할 수 없기 때문에 sscce를 만들 수 없다 - 이것은 부모 프레임/앱에 의해 야기 된 것이어야한다고 생각하지만, 어디서 볼 것인지 전혀 모른다.스윙 팝업 메뉴가 완전히 그려지지 않았습니다
내가 보는 것은 팝업 메뉴의 왼쪽 부분이 칠해지지 않은 부분입니다. JPopupMenu뿐만 아니라 JCombobox 팝업에서도이 동작을 볼 수 있습니다. 내가 의미하는 바를 보여주기 위해 몇 가지 이미지를 첨부했습니다. 이들 중 대부분은 이전에 제대로 작동했고 팝업 메뉴가 생성되거나 표시되는 코드를 변경하지 않고도이 문제가 많은 다른 곳으로 확산되었습니다.
우리는 스윙 구성 요소만을 사용하기 때문에 헤비급 및 경량 구성 요소는 혼합하지 않습니다. 아래에 나와있는 두 가지 예는 앱의 완전히 다른 부분에 있습니다. 첫 번째 패널은 기능이 거의없는 매우 단순한 패널이지만 두 번째 예제 (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());
}
동일한 응용 프로그램에서 중량 (AWT)과 경량 (Swing) 구성 요소를 우연히 혼합 하시겠습니까? –
부모의 클리핑 영역을 부적절하게 변경 하시겠습니까? [sscce] (http://sscce.org)는 사물을 명확히하는 데 도움이됩니다. – trashgod
스윙 구성 요소 만 사용하기 때문에 중량급 및 경량 구성 요소를 혼합하지 않습니다. 두 예제는 앱의 완전히 다른 부분에 있으며 부모의 클리핑 영역을 전혀 변경하지 않습니다. 내가 언급 한 것을 잊어 버린 점은 이러한 팝업이 EDT에서 만들어지고 호출된다는 것입니다. 나는 이것을 복제 할 수 없기 때문에 sscce를 만들 수 없다. 부모 프레임/앱에 의해 발생한 것이어야하지만 어디를 봐야할지 모릅니다. –