0

次のようなユーティリティ メソッドを使用してコードをコンパイルする際に、非推奨の警告を回避することは可能ですか。

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

Horizo​​ntalSplitPanel ウィジェットの明示的な宣言および/または作成。例:

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

私の目標は、使用法を削除せずに、グローバル コンパイラ フラグ ( ) を与えず、Horizo​​ntalSplitPanel と私のユーティリティ メソッドを使用するコードへの影響の可能性に関して最小限の手動リファクタリングを使用して (つまり、コードの変更をできるだけ少なくすることで)、これらの警告HorizontalSplitPanelなくす-Xlint:-deprecationことです

@SuppressWarnings("deprecation")メソッドまたはクラス レベルでの注釈は、import HorizontalSplitPanelステートメントが原因で機能しないようです。非推奨の Horizo​​ntalSplitPanel クラスの置き換えはオプションではありません (今のところ)。

私の目標は達成できますか?もしそうなら、最善のアプローチは何でしょうか?

NetBeans 7.1、Java 1.6、GWT 2.3 を使用しています。

4

2 に答える 2

3

標準モードと SplitlayoutPanel は、非推奨の Horizo​​ntalSplitPanel よりも適切に機能します。Horizo​​ntalSplitPanel を Horizo​​ntalSplitLayoutPanel に置き換える必要があるこのコードを試してください。このコードは実際には最新の SplitLayoutPanel を使用しており、メソッドは非推奨の Horizo​​ntalSplitPanel と同等です。利点は、コードを変更する必要がないことです。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;
    }

}
于 2013-05-06T17:06:12.220 に答える
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からのインターフェースで少しトリックを使用します。これは、GTW APIへのほとんどの呼び出しWidgetでの実装に置き換えることができるため、コードへの影響を最小限に抑えます。IsWidget

HorizontalSplitPanel私のコードで使用されているすべてのメソッドは、フィールドごとHorizontalSplitPanelWrapperに格納されている内部のHorizo​​ntalSplitPanelによって実装され、委任されていhspます。

に関係なく、常に非推奨の警告が生成されるため、type / param/resultとしてHorizo​​ntalSplitPanelを使用するフィールドとメソッドの宣言があってはなりません@SuppressWarnings("deprecation")。このため、hspフィールドはとして宣言されPanelます。

コードの残りの部分で使用されるHorizo​​ntalSplitPanelのメソッドが他にもある場合はHorizontalSplitPanelWrapper、それらすべてにダミーのデリゲーターメソッドが必要です。hsp適切なHorizo​​ntalSplitPanelオブジェクトは、そのようなすべてのメソッドで明示的にキャストされたフィールドから取得する必要があります。

それでおしまい。引き続き使用できるHorizo​​ntalSplitPanelによる非推奨の警告はなくなりました。

于 2012-06-13T11:16:06.767 に答える