那麼我有一個問題的傢伙,並要求你的幫助。 我在我自己的一種JPopupMenu中的添加到允許改變計算方法,但現在我的整個應用程序顯著slowen下來,我把範圍縮小到這一類我提出:自己的JPopupMenu顯着減慢應用程序
class PopUpTimeCalcMethodChangeClickListener extends MouseAdapter {
PopUpMenuTimeCalcMethodChange menu;
public void mousePressed(MouseEvent e){
if (e.isPopupTrigger())
doPop(e);
}
public void mouseReleased(MouseEvent e){
if (e.isPopupTrigger())
doPop(e);
}
private void doPop(MouseEvent e){
if(menu == null)
menu = new PopUpMenuTimeCalcMethodChange();
menu.show(e.getComponent(), 0, 0);
}
}
class PopUpMenuTimeCalcMethodChange extends JPopupMenu {
public PopUpMenuTimeCalcMethodChange(){
final String[] calctyps = {"Calculate by last download","Calculate by average speed"};
for(int i = 0;i<calctyps.length;i++){
final JCheckBox setCalcMethod = new JCheckBox(calctyps[i]);
setCalcMethod.setIconTextGap(15);
if(Main.TimeLeftCalculationMode == i)
setCalcMethod.setSelected(true);
setCalcMethod.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
for(Component c : getmenu().getComponents()){
if(c.getClass() == JCheckBox.class){
((JCheckBox) c).setSelected(false);
}
}
setCalcMethod.setSelected(true);
System.out.println("lol we are running");
int index = -1;
for (int i=0;i<calctyps.length;i++) {
if (calctyps[i].equals(setCalcMethod.getText())) {
index = i;
break;
}
}
Main.TimeLeftCalculationMode = index;
}
});
add(setCalcMethod);
}
}
public JPopupMenu getmenu(){
return this;
}
}
主要問題是代碼在第一次執行後放慢ui,即使它不再可見。我假設它有關於行動者的事情,但我不確定。
爲了更好地幫助更快,發佈[MCVE]或[短,自成一體,正確示例](http://www.sscce.org/)。 –
不要創建新的JPopupMenu,只需更改彈出窗口中顯示的菜單項。 – camickr
也使用'JComponent#setComponentPopupMenu' – MadProgrammer