怎么获取Eclipse里view的id

怎么获取Eclipse里view的id,第1张

在制作eclipse插件的时候,时常需要对已经存在的视图做一些扩展,例如在project explorer中增加一个右键菜单,或者需要获取outline中当前选中项,等等。而这些 *** 作的前提,是获取这些视图的id,然后通过获取视图的语句获取到视图,并进行下一步 *** 作。

例如:如果是在view中:

IViewPartpart=getViewSite()getPage()findView("orgeclipseuiviewsContentOutline");

如果是在action中:

IViewPartpart=PlugingetDefault()getWorkbench()getActiveWorkbenchWindow()getActivePage()findView("orgeclipseuiviewsContentOutline");

可见获取到视图的id是很重要的。如何获取id呢,有很多方法,我觉得比较常用的是以下两种:

1通过手动查找目标视图所在的插件的pluginxml中对改视图的定义,获得视图id。

描述:我觉得这是最保险的办法,因为所有的视图都必定有一个pluginxml定义,但是找到这个pluginxml还是需要一些 *** 作,可能会耗费一些时间。

步骤:

a点击“工具栏”->“Search”->“Search”,或者热键“ctrl+h”。选“ Plugin Search”。

bSearch for 选"Extention Point",Limit to 选“references”,External Scope 选“Enabled Plug-ins only”。

c下面的scope选“Worksapaces”。

d上面的Search String框填入我们要搜索的插件的扩展点的名字,这里我们要找视图插件,所以填入:orgeclipseuiviews

e点击search以后,在底部Search视图内列出很多搜索结果,任意选中一个,双击,可以看到editor内打开了该pluginxml,选中编辑器底部的Extentions,用图形化的方式来查看会更快捷。

f可以看到该插件使用的扩展点已经以列表的形式列出,我们查找的orgeclipseuiviews扩展点也已经选中,展开选中的扩展点,可以看到它实现了哪些view,点击某一个,可以在页面右边看到该视图的详细信息,第一项即是视图的id。

我们无法知道目标视图在搜索结果中的哪个plugin中,所以可能会耗费一些时间,建议在查看搜索结果时,通过对视图的分类分析,确定一个大概范围再进行查看。

同时,用这种方法也可以查找其他扩展点的实现插件。

2通过代码直接读出该视图的id。

描述:通过这种方法,可以直接用鼠标点击某个你想知道的视图,控制台会打印出该视图的id和所属插件的id。

步骤:

a通过插件向导新建一个插件,并使用Available Templates中的Plugin with a view模板,点finish。

b对自动创建的SampleView代码进行修改,修改结果如下。其中主要步骤有三个:实现IPartListener2接口,编写isActivePart()方法,调用isActivePart()方法。

packagecomraullearnsampleviewviews;

importorgeclipseswtwidgetsComposite;

importorgeclipseuipart;

importorgeclipsejfaceviewers;

importorgeclipseswtgraphicsImage;

importorgeclipsejfaceaction;

importorgeclipsejfacedialogsMessageDialog;

importorgeclipseui;

importorgeclipseswtwidgetsMenu;

importorgeclipseswtSWT;

importcomraullearnsampleviewActivator;

/

Thissampleclassdemonstrateshowtoplug-inanew

workbenchviewTheviewshowsdataobtainedfromthe

modelThesamplecreatesadummymodelonthefly,

butarealimplementationwouldconnecttothemodel

availableeitherinthisoranotherplug-in(egtheworkspace)

Theviewisconnectedtothemodelusingacontentprovider

<p>

Theviewusesalabelprovidertodefinehowmodel

objectsshouldbepresentedintheviewEach

viewcanpresentthesamemodelobjectsusing

differentlabelsandicons,ifneededAlternatively,

asinglelabelprovidercanbesharedbetweenviews

inordertoensurethatobjectsofthesametypeare

presentedinthesamewayeverywhere

<p>

/

publicclassSampleViewextendsViewPartimplementsIPartListener2{

privateTableViewerviewer;

privateActionaction1;

privateActionaction2;

privateActiondoubleClickAction;

/

Thecontentproviderclassisresponsiblefor

providingobjectstotheviewItcanwrap

existingobjectsinadaptersorsimplyreturn

objectsas-isTheseobjectsmaybesensitive

tothecurrentinputoftheview,orignore

itandalwaysshowthesamecontent

(likeTaskList,forexample)

/

classViewContentProviderimplementsIStructuredContentProvider{

publicvoidinputChanged(Viewerv,ObjectoldInput,ObjectnewInput){

}

publicvoiddispose(){

}

publicObject[]getElements(Objectparent){

returnnewString[]{"One","Two","Three"};

}

}

classViewLabelProviderextendsLabelProviderimplementsITableLabelProvider{

publicStringgetColumnText(Objectobj,intindex){

returngetText(obj);

}

publicImagegetColumnImage(Objectobj,intindex){

returngetImage(obj);

}

publicImagegetImage(Objectobj){

returnPlatformUIgetWorkbench()

getSharedImages()getImage(ISharedImagesIMG_OBJ_ELEMENT);

}

}

classNameSorterextendsViewerSorter{

}

/

Theconstructor

/

publicSampleView(){

ActivatorgetDefault()getWorkbench()getActiveWorkbenchWindow()

getActivePage()addPartListener(this);

}

@Override

publicvoiddispose(){

//TODOAuto-generatedmethodstub

ActivatorgetDefault()getWorkbench()getActiveWorkbenchWindow()

getActivePage()removePartListener(this);

superdispose();

}

/

Thisisacallbackthatwillallowus

tocreatetheviewerandinitializeit

/

publicvoidcreatePartControl(Compositeparent){

viewer=newTableViewer(parent,SWTMULTI|SWTH_SCROLL|SWTV_SCROLL);

viewersetContentProvider(newViewContentProvider());

viewersetLabelProvider(newViewLabelProvider());

viewersetSorter(newNameSorter());

viewersetInput(getViewSite());

makeActions();

hookContextMenu();

hookDoubleClickAction();

contributeToActionBars();

}

privatevoidhookContextMenu(){

MenuManagermenuMgr=newMenuManager("#PopupMenu");

menuMgrsetRemoveAllWhenShown(true);

menuMgraddMenuListener(newIMenuListener(){

publicvoidmenuAboutToShow(IMenuManagermanager){

SampleViewthisfillContextMenu(manager);

}

});

Menumenu=menuMgrcreateContextMenu(viewergetControl());

viewergetControl()setMenu(menu);

getSite()registerContextMenu(menuMgr,viewer);

}

privatevoidcontributeToActionBars(){

IActionBarsbars=getViewSite()getActionBars();

fillLocalPullDown(barsgetMenuManager());

fillLocalToolBar(barsgetToolBarManager());

}

privatevoidfillLocalPullDown(IMenuManagermanager){

manageradd(action1);

manageradd(newSeparator());

manageradd(action2);

}

privatevoidfillContextMenu(IMenuManagermanager){

manageradd(action1);

manageradd(action2);

//Otherplug-inscancontributethereactionshere

manageradd(newSeparator(IWorkbenchActionConstantsMB_ADDITIONS));

}

privatevoidfillLocalToolBar(IToolBarManagermanager){

manageradd(action1);

manageradd(action2);

}

@Override

publicvoidpartBroughtToTop(IWorkbenchPartReferencepartRef){

//TODOAuto-generatedmethodstub

}

@Override

publicvoidpartClosed(IWorkbenchPartReferencepartRef){

//TODOAuto-generatedmethodstub

}

@Override

publicvoidpartDeactivated(IWorkbenchPartReferencepartRef){

//TODOAuto-generatedmethodstub

}

@Override

publicvoidpartHidden(IWorkbenchPartReferencepartRef){

//TODOAuto-generatedmethodstub

}

@Override

publicvoidpartInputChanged(IWorkbenchPartReferencepartRef){

//TODOAuto-generatedmethodstub

}

@Override

publicvoidpartOpened(IWorkbenchPartReferencepartRef){

//TODOAuto-generatedmethodstub

}

privatevoidisActivePart(){

IWorkbenchPartpart=getViewSite()getPage()getActivePart();

//returnpart!=null&&partequals(this);

Systemoutprintln(partgetSite()getId());

partgetSite()getPluginId();

}

}

然后调插件,在运行环境中调出该视图,接着当你用鼠标点击你想知道的视图时,在开发环境中的控制台,就会打印出该视图的id以及所属插件的id。

btnAddClasssetOnClickListener(new ViewOnClickListener() {

//你的数据获取是在哪个位置?

//String classDay = etDaygetText()toString()trim();

//String className = etNamegetText()toString()trim();

 public void onClick(View view) {

       String classDay = etDaygetText()toString()trim();

       String className = etNamegetText()toString()trim();

   }

});

<div id="dlg" class="easyui-dialog" title="Toolbar and Buttons" style="width:1040px;height:600px;padding:10px" 

 2             data-options="

 3                 

 4                 buttons: [{

 5                     text:'保存',

 6                     iconCls:'icon-ok',

 7                     handler:function(){

 8                         ChangeMessage();

 9                     }

10                 },{

11                     text:'关闭',

12                     handler:function(){

13                         alert('cancel');;

14                     }

15                 }]

16             ">

17 

18 

19         <table id="detail_table" iconCls="icon-save" title="My Window" style="width: 100%; height: 300; font-size: 14px;" class="table">

20     <tr>

21         <td align="right">编号</td>

22         <td align="left"><input id="MessageId" class="combo datebox" style="width:180px; height: 20px;" readonly="true"></td>

23         <td align="right">菜单名称</td>

24         <td align="left"><input id="MessageTitle" class="combo datebox" style="width:180px; height: 20px;"></td>

25         <td align="right">数据类型</td>

26         <td align="left">

27             <select id="MessageType" class="easyui-combobox" panelHeight="auto" style="width:180px" onchange="MessageType_change(this)">

28                 <option value="MODE">模块</option>

29                 <option value="MENU">菜单</option>

30                 <option value="TEXT">文本</option>

31             </select>

32         </td>

33     </tr>

34     <tr>

35         <td align="right">上级编号</td>

36         <td align="left"><input id="ParentID" class="combo datebox" style="width:180px; height: 20px;" readonly="true"></td>

37         <td align="right">创建人</td>

38         <td align="left"><input id="MessageAuthorId" class="combo datebox" style="width:180px; height: 20px;" value="admin" readonly="true"></td>

39         <td align="right">创建时间</td>

40         <td align="left"><input id="MessageDate" class="combo datebox" style="width:180px; height: 20px;" readonly="true"></td>

41     </tr>

42 

43 

44     <tr id="Content_textarea">

45         <td colspan="6">

46             内容&emsp;

47             <textarea class="ckeditor" cols="80" id="MessageContent_ckeditor" name="editor1" rows="10"></textarea>

48            

49         </td>

50     </tr>

51 @    <tr id="Content_input">

52         <td>

53             内容

54         </td>

55         <td><input id="MessageContent" class="combo datebox" style="width:180px; height: 20px;"></td>

56         <td colspan="4"></td>

57     </tr>@

58     <tr>

59         <td colspan="6">&emsp;</td>

60     </tr>

61 </table>

62     </div>

工作中需要根据前一个dialog的位置确定后一个dialog位置,于是在这里遇到了一个问题。首先我是这么 *** 作:

alert($("#dialog")dialog('options')['left'] ); 不好意思得到null。而通过js对title进行了设置,取title值是可以的。这里没对left设置,采用默认设置。通过firedebug 调试,发现div 的id已经改变,而该div的父级元素 设置了top 和left 于是乎:alert($("#dialog")parent()css('left')); 问题解决。描述的不够准确。如果有问题,敬请指出!

一般显示日期选择对话框是这样子的:

获取到id后就开始获取View:

设置view监听,然后模拟年份选择那样弄个RecyclerView盖住底下的日期表,选择后使用 datePickerupdateDate(年,月,日) ;更新DatePicker 界面就可以了。 注意:源码写了,月份是从0开始的,所以如果你要显示9月,传进去8就行。

要修改这一切,记得都在 datePickerDialogshow(); 之前进行 *** 作。

因为是别人项目的需求,所以只是寻找解决方案,没有做月份选择的列表,也没有demo。只是记录一下,怕下次自己也遇到了。

上面的 *** 作时在70设备上 *** 作的,能正常使用。但50却是另一种样式的。

最后,像这种奇葩功能,建议是拒接接受。

1、获取对话框的布局 AlertDialog dlg = XXXXX;//初始化一个对话框View view = dlggetView();//获取对话框的布局2、通过对话框的布局获取对应的edittext组件 EditText et = (EditText)dlgfindViewById(Ridxxxx);//获取对话框中的EditText3、

jsp中可以利用div+css来实现dialogd出:

CSS代码如下:

#div

{

position:absolute;

left:0;

right:0;

top:0;

bottom:0;

z-index:999;

}

#div layer

{

position:absolute;

left:0;

right:0;

top:0;

bottom:0;

z-index:1000;

background: gray;

filter:alpha(opacity=60);

-moz-opacity: 06; /Firefox私有,透明度50%/

opacity: 06; /其他,透明度50%/

}

#div #center

{

position: absolute;

left: 200px;

right: 200px;

top: 70px;

bottom: 400px;

width:170px;

background:rgb(255,255,255);

margin:100px auto;

padding:60px 100px 100px 100px;

z-index: 1001;

}

DIV代码如下:

<div id="div" style="display:none">

<div class="layer">

</div>

<div id="center">

点我d出:

</div>

</div>

new AlertDialogBuilder(this)

setTitle("标题")

setMessage("简单消息框")

setPositiveButton("确定", null)

show();

new AlertDialogBuilder(this)

setMessage("Not connected to wifi devices")

setNegativeButton("确定",new AlertDialogOnClickListener() {

@Override

public void onClick(DialogInterface arg0, int arg1) {

// TODO Auto-generated method stub

}

})

show();

以上就是关于怎么获取Eclipse里view的id全部的内容,包括:怎么获取Eclipse里view的id、android dialog 可以获取到button点击事件,但是获取不到输入的值、easyui:关于使用dialog获取其中元素与直接获取元素的差别等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9325416.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存