添加属性页

本文介绍如何在Eclipse RCP应用程序中创建和使用属性页。通过示例代码展示了如何定义属性页类、配置plugin.xml文件以及如何通过Action打开特定类型的属性页。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  我们先来看看Eclipse提供的属性页

 

  通过这个属性页我们可以更详细的了解一些属性的详细内容,而且可以将这些展示的界面集中起来,统一管理,非常方便,而且可以让界面的风格可以统一

  我们新建一个RCP工程,名称为com.vwpolo.rcp.propertypage,然后在新建一个 PropertyPage 类,

   打开这个项目的plugin.xml文件,切换到 Extensions 选项卡,添加org.eclipse.ui.propertyPage 扩展点,添加属性页,具体信息如下图所示

  我们来看下对应plugin.xml文件中的代码

<extension
         
point="org.eclipse.ui.propertyPages">
      
<page
            
class="com.vwpolo.rcp.propertypage.StudentPropertyPage"
            id
="com.vwpolo.rcp.propertypage.StudentPropertyPage"
            name
="学生信息"
            objectClass
="com.vwpolo.rcp.model.Student">
      
</page>
   
</extension>    

  这里指定的属性页类为 " com.vwpolo.rcp.propertypage.StudentPropertyPage ,属性页ID为" com.vwpolo.rcp.propertypage.StudentPropertyPage ",属性页的名称为 "学生信息",这里的 objectClass 这个属性是指定适配的对象,也就是说当传入数据是 objectClass 指定的类或及子类时,这个属性页才可能会弹出,反之则不弹出属性页,

  我们通过以下代码调用属性页打开Action

 过程非常简单,有兴趣的话可以自己试试,对了,在这里说明一下,如果不想显示默认和应用按钮可以在构造方法中调用 noDefaultAndApplyButton 方法

 

final MenuItem menuItem = new MenuItem(menu, SWT.NONE);
    menuItem.addSelectionListener(
new SelectionAdapter() {
      @SuppressWarnings(
"deprecation")
      
public void widgetSelected(SelectionEvent e) {
        PropertyDialogAction action 
= new PropertyDialogAction(getSite().getShell(), tableViewer);
        action.run();
      }
    });
    
    menuItem.setText(
"属性");    

  通过这样我们就可以打开属性页

  我们还要在 StudentPropertyPage.java 这个类处理显示属性页之前的操作,我们这里在显示属性页之前将出入的对象填充到属性页的文本框中去,下面是这个属性页的完整源代码

package com.vwpolo.rcp.propertypage;

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.dialogs.PropertyPage;

import com.vwpolo.rcp.model.Student;

public class StudentPropertyPage extends PropertyPage {

  
private Text sexText;
  
private Text addressText;
  
private Text ageText;
  
private Text nameText;
  
private Text idText;
  
/**
   * Create the property page
   
*/
  
public StudentPropertyPage() {
    
super();
    setDescription(
"学生详细信息");
    setTitle(
"学生属性");
    
    noDefaultAndApplyButton();
  }

  
/**
   * Create contents of the property page
   * 
@param parent
   
*/
  @Override
  
public Control createContents(Composite parent) {
    Composite container 
= new Composite(parent, SWT.NULL);
    
final GridLayout gridLayout = new GridLayout();
    gridLayout.numColumns 
= 4;
    container.setLayout(gridLayout);

    
final Label label = new Label(container, SWT.NONE);
    label.setText(
"学号");

    idText 
= new Text(container, SWT.BORDER);
    
final GridData gd_idText = new GridData(SWT.FILL, SWT.CENTER, truefalse);
    idText.setLayoutData(gd_idText);

    
final Label label_1 = new Label(container, SWT.NONE);
    label_1.setText(
"姓名");

    nameText 
= new Text(container, SWT.BORDER);
    
final GridData gd_nameText = new GridData(SWT.FILL, SWT.CENTER, truefalse);
    nameText.setLayoutData(gd_nameText);

    
final Label label_2 = new Label(container, SWT.NONE);
    label_2.setText(
"年龄");

    ageText 
= new Text(container, SWT.BORDER);
    
final GridData gd_ageText = new GridData(SWT.FILL, SWT.CENTER, truefalse);
    ageText.setLayoutData(gd_ageText);

    
final Label label_3 = new Label(container, SWT.NONE);
    label_3.setText(
"性别");

    sexText 
= new Text(container, SWT.BORDER);
    
final GridData gd_sexText = new GridData(SWT.FILL, SWT.CENTER, truefalse);
    sexText.setLayoutData(gd_sexText);

    
final Label label_4 = new Label(container, SWT.NONE);
    label_4.setText(
"家庭地址");

    addressText 
= new Text(container, SWT.BORDER);
    
final GridData gd_addressText = new GridData(SWT.FILL, SWT.CENTER, truefalse31);
    addressText.setLayoutData(gd_addressText);
    
new Label(container, SWT.NONE);
    
new Label(container, SWT.NONE);
    
//
    
    updateStudentText();
    
    
return container;
  }

  
/**
   * <p>更新/填充学生信息。</p>
   * 
@author 刘尧兴
   
*/
  
private void updateStudentText() {
    Student student 
= ((Student)getElement().getAdapter(Student.class));
    
if(student == null)
      
return;
    
    idText.setText(student.getId());
    nameText.setText(student.getName());
    ageText.setText(student.getAge() 
+ "");
    sexText.setText(student.getSex());
    addressText.setText(student.getAddress());
  }
}
    

  我们通过  Student student = ((Student)getElement().getAdapter(Student. class ));

  这段代码取得数据提供者,通过适配一个Student对象,得到传入到属性页中的对象,然后就填充相应的属性了,下面看最终的效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值