2012-06-11 1 views
0

Можно ли избежать предупреждения устаревания при компиляции кода со служебными методами, такими как:Как избежать предупреждений об устаревании для GWT HorizontalSplitPanel в проекте Java NetBeans?

public static void doSthForHorizontalSplitPanel(HorizontalSplitPanel hsp) {...} 

и явного объявления и/или создания HorizontalSplitPanel виджета, например:

protected HorizontalSplitPanel main; 
... 
    main = new HorizontalSplitPanel(); 

Моя цель состоит в том, чтобы устранить эти предупреждения без удаления HorizontalSplitPanel использования, не давая глобальный флаг компилятора (-Xlint:-deprecation) и с помощью минимального ручного рефакторинга с точки зрения возможного im pact на коде с использованием HorizontalSplitPanel и моих методов утилиты (т. так как мало изменяется код).

Аннотация @SuppressWarnings("deprecation") на уровне метода или класса, похоже, не работает из-за import HorizontalSplitPanel утверждений, заменяющих устаревший класс HorizontalSplitPanel не в качестве опции (пока).

Можно ли достичь моей цели вообще? Если да, то какой будет лучший подход?

Я использую NetBeans 7.1, Java 1.6, GWT 2.3.

ответ

1

Мой подход заключается в следующем.

Заменить каждое использование HorizontalSplitPanel с HorizontalSplitPanelWrapper, определенной ниже, а затем зафиксировать импорт - это позволит устранить import HorizontalSplitPanel и добавить import HorizontalSplitPanelWrapper. Готово.

@SuppressWarnings("deprecation") 
public class HorizontalSplitPanelWrapper implements IsWidget { 

    private Panel hsp = new com.google.gwt.user.client.ui.HorizontalSplitPanel(); 

    public Widget asWidget() { 
     return hsp; 
    } 

    public com.google.gwt.user.client.Element getElement() { 
     return hsp.getElement(); 
    } 

    public <H extends EventHandler> HandlerRegistration addHandler(final H handler, GwtEvent.Type<H> type) { 
     return hsp.addHandler(handler, type); 
    } 

    public boolean isResizing() { 
     return ((com.google.gwt.user.client.ui.HorizontalSplitPanel) hsp).isResizing(); 
    } 

    public void setWidth(String width) { 
     hsp.setWidth(width); 
    } 

    public void setSplitPosition(String pos) { 
     ((com.google.gwt.user.client.ui.HorizontalSplitPanel) hsp).setSplitPosition(pos); 
    } 

    public void add(IsWidget w) { 
     hsp.add(w); 
    } 
} 

Дополнительные замечания.

Мое решения использует небольшой трюк с IsWidget интерфейсом с GWT - это сводит к минимуму воздействия кода, поскольку Widget может быть замещен реализацией IsWidget в большинстве обращений к API, Gtw.

Каждый метод HorizontalSplitPanel, используемый в моем коде, теперь реализован HorizontalSplitPanelWrapper и просто делегирован внутренней горизонтальной плавающей панели, сохраненной полем hsp.

Не должно быть никаких объявлений полей и методов с HorizontalSplitPanel как type/param/result, так как оно всегда будет давать предупреждения об отказе, независимо от @SuppressWarnings("deprecation"). Из-за этого поле hsp объявлено как Panel.

Если в остальной части кода используется больше методов HorizontalSplitPanel, для каждого из них должен быть фиктивный метод делегирования в HorizontalSplitPanelWrapper. Правильный объект HorizontalSplitPanel должен быть извлечен из поля hsp с явным приведением в каждом таком методе.

Все. Больше предупреждений об устаревании из-за HorizontalSplitPanel, которые все еще можно использовать.

3

Режим стандартов и SplitlayoutPanel работает лучше, чем устаревшая горизонтальная панель. Попробуйте этот код, который вы должны заменить HorizontalSplitPanel с помощью HorizontalSplitLayoutPanel. Этот код фактически использует последнюю версию SplitLayoutPanel, и методы эквивалентны устаревшей горизонтальной плоскостиSplitPanel. Преимущество в том, что вам не нужно менять код. Также вставлен код для VerticalSplitPanel альтернативный VerticalSplitLayoutPanel. VerticalSplitLayoutPanel тестируется и работает отлично.

import com.google.gwt.user.client.DOM; 
import com.google.gwt.user.client.Event; 
import com.google.gwt.user.client.ui.ScrollPanel; 
import com.google.gwt.user.client.ui.SplitLayoutPanel; 
import com.google.gwt.user.client.ui.Widget; 

/** 
* author: MKK 
* Date: 4/29/13 
* Time: 10:41 AM 
* /** 
* 
* GWT depecrated HorizontalSplitpanel as of version 2.0. 
* This is a wrapper class which extends new SplitLayoutPanel and has all the methods of deprecated old Splitpanels for 
* seamless integration with existing code without breaking. 
* Replacement of old HorizontalSplitLayoutPanel with new SplitLayoutPanel 
* 
* 
*/ 
public class HorizontalSplitLayoutPanel extends SplitLayoutPanel{ 


    private ScrollPanel leftScrollPanel = new ScrollPanel(); 
    private ScrollPanel rightScrollPanel = new ScrollPanel(); 
    private Widget leftWidget; 
    private Widget rightWidget; 


    public HorizontalSplitLayoutPanel(){ 
     super(); 
     init(); 

    } 
    boolean dragged; 
    public void onBrowserEvent(Event event) { 
     super.onBrowserEvent(event); 
     switch (DOM.eventGetType(event)) { 
      case Event.ONMOUSEDOWN: 
       dragged = true; 
       break; 
      case Event.ONMOUSEUP: 
       dragged = false; 
       break; 
      case Event.ONMOUSEMOVE: 
       break; 
     } 
    } 

    public boolean isResizing(){ 
     return dragged; 
    } 

    private void init() { 
     setSize("100%", "100%"); 
     addWest(leftScrollPanel, 300); 
     add(rightScrollPanel); 
     sinkEvents(Event.ONMOUSEDOWN | Event.ONMOUSEUP); 
    } 

    public HorizontalSplitLayoutPanel(int splitterSize) { 
     super(splitterSize); 
     init(); 
    } 


    public void setLeftWidget(Widget widget){ 
     this.leftWidget = widget; 
     leftScrollPanel.clear(); 
     leftScrollPanel.add(widget); 
     setSplitPosition("30%"); 
     setWidgetToggleDisplayAllowed(leftScrollPanel,true); 
    } 

    public void setRightWidget(Widget widget){ 
     try { 
      this.rightWidget = widget; 
      rightScrollPanel.clear(); 
      rightScrollPanel.add(widget); 
      setSplitPosition("30%"); 

     } catch (Exception e) { 
      e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. 
     } 
    } 


    public void removeWidget(Widget widget){ 
     try { 
      if(leftScrollPanel.getWidget()== widget){ 
       leftScrollPanel.remove(widget); 
       return; 
      } 
      rightScrollPanel.remove(widget); 
     } catch (Exception e) { 
     } 

    } 


    public void setSplitPosition(String percent){ 
     if(percent.toLowerCase().indexOf("px") > -1){ 
      percent = percent.replace("px","").trim(); 
      int p = Integer.parseInt(percent); 
      setSplitPosition(p); 
      return; 
     } 
     percent = percent.replace("%","").trim(); 
     int p = Integer.parseInt(percent); 
     double size = (getOffsetWidth()*p)/100.0; 
     if(p < 1.0){ 
      size = 600; 
     } 
     setWidgetSize(leftScrollPanel, size); 
    } 

    public void setSplitPosition(int pixels){ 
     setWidgetSize(leftScrollPanel, pixels); 

    } 


    public void hideLeftWidget() { 
     leftScrollPanel.clear(); 
     setWidgetMinSize(leftScrollPanel,0); 
    } 

    public void showLeftWidget(){ 
     leftScrollPanel.add(leftWidget); 
    } 
    public void hideRightWidget() { 
     rightScrollPanel.clear(); 
     setWidgetMinSize(rightScrollPanel,0); 
    } 

    public void showRightWidget(){ 
     rightScrollPanel.add(rightWidget); 
    } 
} 

import com.google.gwt.user.client.DOM; 
import com.google.gwt.user.client.Event; 
import com.google.gwt.user.client.Window; 
import com.google.gwt.user.client.ui.ScrollPanel; 
import com.google.gwt.user.client.ui.SplitLayoutPanel; 
import com.google.gwt.user.client.ui.Widget; 

/** 
* 
* GWT depecrated VerticalSplitPanel as of version 2.0. 
* This is a wrapper class which extends new SplitLayoutPanel and has all the methods of deprecated old Splitpanels for 
* seamless integration with existing code without breaking. 
* Replacement of old VerticalSplitPanel with new SplitLayoutPanel 
* 
* 
*/ 
public class VerticalSplitLayoutPanel extends SplitLayoutPanel { 

    private Widget topWidget; 
    private Widget bottomWidget; 
    private int offset=100; 

    private ScrollPanel topScrollPanel = new ScrollPanel(); 
    private ScrollPanel bottomScrollPanel = new ScrollPanel(); 




    public VerticalSplitLayoutPanel() { 
     super(); 
     init(); 
    } 

    public VerticalSplitLayoutPanel(int splitterSize) { 
     super(splitterSize); 
     init(); 

    } 

    private void init() { 
     setSize("100%", "100%"); 
     //int clientH = Window.getClientHeight()-offset; 
     // double size = clientH * 50/100; 
     addNorth(topScrollPanel, getOffsetHeight()/2.0); 
     add(bottomScrollPanel); 

     sinkEvents(Event.ONMOUSEDOWN | Event.ONMOUSEUP); 
    } 

    boolean dragged; 
    public void onBrowserEvent(Event event) { 
     super.onBrowserEvent(event); 
     switch (DOM.eventGetType(event)) { 
      case Event.ONMOUSEDOWN: 
       dragged = true; 
       break; 
      case Event.ONMOUSEUP: 
       dragged = false; 
       break; 
      case Event.ONMOUSEMOVE: 
       break; 
     } 
    } 

    public boolean isResizing(){ 
     return dragged; 
    } 

    public void setTopWidget(Widget widget){ 
     topScrollPanel.add(widget); 
    } 

    public void setBottomWidget(Widget widget){ 
     bottomScrollPanel.add(widget); 
    } 


    public void removeWidget(Widget widget){ 
     try { 
      if(topScrollPanel.getWidget()== widget){ 
       topScrollPanel.remove(widget); 
       return; 
      } 
      bottomScrollPanel.remove(widget); 
     } catch (Exception e) { 
     } 

    } 


    public void setSplitPosition(String percent){ 
     if(percent.toLowerCase().indexOf("px") > -1){ 
      percent = percent.replace("px","").trim(); 
      int p = Integer.parseInt(percent); 
      setSplitPosition(p); 
      return; 
     } 
     percent = percent.replace("%","").trim(); 
     int p = Integer.parseInt(percent); 
     int oH = getOffsetHeight(); 
     if(oH == 0){ 
      oH = (Window.getClientHeight()-offset); 
     } 
     double h = (oH*p)/100.0; 
     setWidgetSize(topScrollPanel, h); 

    } 


    public void setSplitPosition(int pixels){ 
     setWidgetSize(topScrollPanel, pixels); 

    } 



    public void setOffset(int size){ 
     this.offset = size; 
    } 

} 
Смежные вопросы