JFace Viewer 3

本文详细介绍了Eclipse SWT库中的StructuredViewer、ListViewer及TableViewer等控件的使用方法与API,包括如何设置标签提供者、内容提供者、排序器等,并提供了具体的示例代码。

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

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

5.1.5. StructuredViewer

StructuredViewer æ¯å表æ¥çå¨ï¼è¡¨æ ¼æ¥çå¨ï¼æ æ¥çå¨çæ½è±¡è¶ç±»ã(åè§Figure 5-7)

Figure 5-7. StructuredViewer 屿¬¡å¾


ä¸å为é常使ç¨çAPIï¼

addDoubleClickListener(IDoubleClickListener) 为æ¥ç卿·»å é¼ æ åå»çå¬å¨ã

addDragSupport(int, Transfer[], DragSourceListener) 为æ¥ç卿·»å æ¯ææåç´ çæä½ã

addDropSupport(int, Transfer[], DropTargetListener) 为æ¥ç卿·»å æ¥æ¶éæ¾åç´ å°å¶ä¸­çæ¯æã

addFilter(ViewerFilter) 为æ¥ç卿·»å è¿æ»¤å¨ï¼å¹¶è§¦åæ¥çå¨éæ°è¿æ»¤åæååç´ ã

addHelpListener(HelpListener) 为æ¥ç卿·»å å¯¹å¸®å©è¯·æ±ççå¬å¨ã

addOpenListener(IOpenListener) æ·»å å¯¹é中åç´ è¿è¡æå¼æä½ççå¬å¨ã

addSelectionChangedListener(ISelectionChangedListener) 为æ¥ç卿·»å éæ©åç´ æ¹åçå¬å¨ã

addPostSelectionChangedListener(ISelectionChangedListener) 为æ¥ç卿·»å éæ©åäºä»¶çå¬å¨ã

getSelection() å­ç±»å®ç°æ­¤æ¹æ³ï¼ä»¥IStructuredSelectionæ¥å£è¿åé中çåç´ ã

refresh() å·æ°æ¥çå¨ã

refresh(boolean) å·æ°æ¥çå¨ãåæ°è¡¨ç¤ºæ¯å¦å·æ°å·²å­å¨åç´ çæ ç­¾ã

refresh(Object) 仿å®åç´ å¼å§å·æ°æ¥çå¨ã

refresh(Object, boolean) 仿å®åç´ å¼å§å·æ°æ¥çå¨ãåæ°è¡¨ç¤ºæ¯å¦å·æ°å·²å­å¨åç´ çæ ç­¾ã

resetFilters() æ¸é¤è¿æ»¤å¨ï¼å¹¶è§¦åæ¥çå¨éæ°è¿æ»¤åæååç´ ã

setComparer(IElementComparer) 设置æ¯è¾å¨æ¥è¿è¡åç´ æ¯è¾ï¼å¦ææ²¡æè®¾ç½®ï¼åé»è®¤ä½¿ç¨åç´ æ¬èº«çequals å hashCodeã

setContentProvider(IContentProvider) æ¬æ¹æ³ä¼æ ¡éªå容ä¾ç»å¨ä¸º IStructuredContentProviderã

setData(String, Object) è®¾ç½®å±æ§åå¼ï¼å¦æ Object设为nullè¯¥å±æ§å°è¢«å é¤ã

setInput(Object) ContentViewer å®ç°äºè¯¥æ¹æ³ï¼è°ç¨å容ä¾ç»å¨çinputChangedæ¹æ³ï¼ç¶åè°ç¨inputChanged æ¹æ³ã å容ä¾ç»å¨getElements(Object) éåå°è¢«è°ç¨ï¼ä»¥Objectä½ä¸ºè¾å¥åæ°ï¼ä»¥å³å®æ¥çå¨ç根级åç´ ã

setSelection(ISelection, boolean) StructuredViewerå®ç°äºè¯¥æ¹æ³ï¼è®¾å®æ¥çå¨é中è¾å¥çåç´ ã

setSorter(ViewerSorter) 设置æ¥çå¨çæåºå¨ï¼å¹¶è§¦åæ¥çå¨éæ°è¿æ»¤åæååç´ ã

setUseHashlookup(boolean) 设置æ¯å¦å¨æ¥çå¨ä¸­ä½¿ç¨åé¨åå¸è¡¨ä»¥æé«åç´ åSWTé¨ä»¶çæ å°é度ã

update(Object[], String[]) æ´æ°æå®åç´ çæ¾ç¤ºç¶æã

update(Object, String[])æ´æ°æå®åç´ çæ¾ç¤ºç¶æã

5.1.6. ListViewer

ListViewerç±» å°è£äºList æ§ä»¶ï¼å¯ä»¥ç¨æ¥æ¾ç¤ºå¯¹è±¡éåè䏿¯å­ç¬¦ä¸²éåãå表æ¥çå¨éè¦è®¾ç½®æ ç­¾ä¾ç»å¨åå容ä¾ç»å¨ã常ç¨API忬:

add(Object) 为å表æ¥çå¨å å¥æå®åç´ ã

add(Object[])为å表æ¥çå¨å å¥æå®åç´ ã

getControl()è¿å该æ¥çå¨çæ ¹æºæ§ä»¶ã

getElementAt(int) æ ¹æ®æå®ä½ç½®è¿åç¸åºçåç´ ã

getList() è¿åå表æ¥çå¨çå表æ§ä»¶ã

remove(Object) å é¤å表æ¥çå¨çæå®åç´ ã

remove(Object[]) å é¤å表æ¥çå¨çæå®åç´ ã

reveal(Object) æ»å¨æ¥çå¨ï¼ä¿è¯æå®å素被æ¾ç¤ºã

setLabelProvider(IBaseLabelProvider)å表æ¥çå¨å®ç°äºè¯¥Vieweræ¡æ¶çæ¹æ³ï¼å¯ä»¥ä¿è¯æ ç­¾ä¾ç»å¨ä¸ºILabelProvider

ä¸é¢çå对象å°ç¨å¨ä»¥åçç¨åºä¾å­ä¸­ã
public class Person {
   public String firstName = "John";
   public String lastName = "Doe";
   public int age = 37;
   public Person[] children = new Person[0];
   public Person parent = null;
   public Person(String firstName, String lastName,
      int age) {
      this.firstName = firstName;
      this.lastName = lastName;
      this.age = age;
   }
   public Person(String firstName, String lastName,
      int age, Person[] children) {
      this(firstName, lastName, age);
      this.children = children;
      for (int i = 0; i < children.length; i++) {
         children[i].parent = this;
      }
   }
   public static Person[] example() {
      return new Person[] {
         new Person("Dan", "Rubel", 41, new Person[] {
            new Person("Beth", "Rubel", 11),
            new Person("David", "Rubel", 6)}),
         new Person("Eric", "Clayberg", 42, new Person[] {
            new Person("Lauren", "Clayberg", 9),
            new Person("Lee", "Clayberg", 7)}),
         new Person("Mike", "Taylor", 55)
      };
   }
   public String toString() {
      return firstName + " " + lastName;
   }
}

ä¸é¢çä¾å­å建äºä¸ä¸ªå表æ¥çå¨ï¼å¹¶è®¾ç½®äºæ ç­¾ä¾ç»å¨ï¼å容ä¾ç»å¨åæåºå¨ã (åè§ Figure 5-8) 注æ: è¦ç¬ç«è¿è¡æ­¤ç¨åº, ä½ å¿é¡»æ·»å å¦ä¸å项å°ä½ çJava Build Path (æä»¶çæ¬å·è¦ç¬¦åå®è£çEclipse)ã
ECLIPSE_HOME/plugins/org.eclipse.core.runtime_3.1.2.jar
ECLIPSE_HOME/plugins/org.eclipse.jface_3.1.1.jar
ECLIPSE_HOME/plugins/org.eclipse.jface.text_3.1.2.jar
ECLIPSE_HOME/plugins/org.eclipse.text_3.1.1.jar

import org.eclipse.jface.viewers.*;
import org.eclipse.swt.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;

public class ListViewerExample {
   public static void main(String[] args) {
      Display display = new Display();
      Shell shell = new Shell(display);
      shell.setText("List Viewer Example");
      shell.setBounds(100, 100, 200, 100);
      shell.setLayout(new FillLayout());
      final ListViewer listViewer =
         new ListViewer(shell, SWT.SINGLE);
      listViewer.setLabelProvider(
         new PersonListLabelProvider());
      listViewer.setContentProvider(
         new ArrayContentProvider());
      listViewer.setInput(Person.example());
      listViewer.setSorter(new ViewerSorter() {
         public int compare(
            Viewer viewer, Object p1, Object p2) {
            return ((Person) p1).lastName
               .compareToIgnoreCase(((Person) p2).lastName);
         }
      });
      listViewer.addSelectionChangedListener(
         new ISelectionChangedListener() {
         public void selectionChanged(
            SelectionChangedEvent event) {
            IStructuredSelection selection =
               (IStructuredSelection) event.getSelection();
            System.out.println("Selected: "
               + selection.getFirstElement());
         }
      });
      listViewer.addDoubleClickListener(
         new IDoubleClickListener() {
         public void doubleClick(DoubleClickEvent event)
         {
            IStructuredSelection selection =
               (IStructuredSelection) event.getSelection();
            System.out.println("Double Clicked: " +
               selection.getFirstElement());
         }
      });
      shell.open();
      while (!shell.isDisposed()) {
         if (!display.readAndDispatch()) display.sleep();
      }
      display.dispose();
   }
}

Figure 5-8. ListViewer example.


å表æ¥çå¨å建åï¼ä½¿ç¨ setLabelProvider() æ¹æ³è®¾ç½®æ ç­¾ä¾ç»å¨ï¼ä½¿ç¨setContentProvider() 设置å容ä¾ç»å¨ã PersonListLabelProviderä½ä¸ºå容ä¾ç»å¨, è¿åç±åå­ç»æçæå­æ ç­¾ï¼æ²¡æè¿å徿 ã该类ç¨åºå¦ä¸:
public class PersonListLabelProvider extends LabelProvider {
   public Image getImage(Object element) {
      return null;
   }
   public String getText(Object element) {
      Person person = (Person) element;
      return person.firstName + " " + person.lastName;
   }
}

使ç¨å建ç ArrayContentProvideræä¸ºå容ä¾ç»å¨ï¼å®å°è¾å¥çéåæ å°ä¸ºæ°ç»ãä½¿ç¨ setInput() æ¹æ³è®¾ç½®è¾å¥æ°æ®ãæåºå¨å®ä¹äºcompare()æ¹æ³ï¼å®åºäºåå­è¿è¡æåºãæåï¼ä¸ºå表æ¥ç卿·»å äºselectionChanged çå¬å¨ådoubleClickçå¬å¨ã

5.1.7. TableViewer

TableViewer ç±»å°è£äºTableæ§ä»¶ã表格æ¥ç卿ä¾äºå¯ç¼è¾çï¼åç´çï¼å¤åçæ¡ç®å表ãå¨åè¡¨ä¸­ï¼æ¯ä¸ä¸ªæ¡ç®æ¾ç¤ºä¸ºä¸è¡ååæ ¼ãæ¯ä¸ä¸ªååæ ¼æ¾ç¤ºäºæ¡ç®çç¸åºå±æ§ã表格æ¥çå¨éè¦éç½®æ ç­¾ä¾ç»å¨ï¼å容ä¾ç»å¨ååä¿¡æ¯ã CheckboxTableViewer å å¥äºå¯¹ä¸ªå«æ¡ç®æ³ç°çæ¯æï¼è¿å¯ä»¥é中ååé䏿¡ç®ç¸å³èçå¤éæ¡ã常ç¨çAPI忬:

add(Object) å表格æ¥çå¨ä¸­å å¥æå®çåç´ ãå½ä¸ä¸ªåç´ å·²ç»è¢«å å¥å°æ°æ®æ¨¡å中ï¼å¸ææ¥çå¨è½å¤ååæ æ°æ®æ¨¡åçæ¶åï¼è°ç¨è¯¥æ¹æ³ãæ­¤æ¹æ³åªå½±åæ¥çå¨ï¼ä¸å½±åæ°æ®æ¨¡åã

add(Object[]) å表格æ¥çå¨ä¸­å å¥æå®çåç´ ã å½åç´ å·²ç»è¢«å å¥å°æ°æ®æ¨¡å中ï¼å¸ææ¥çå¨è½å¤ååæ æ°æ®æ¨¡åçæ¶åï¼è°ç¨è¯¥æ¹æ³ãæ­¤æ¹æ³åªå½±åæ¥çå¨ï¼ä¸å½±åæ°æ®æ¨¡åã

cancelEditing() åæ¶å½åèµ·ä½ç¨çååæ ¼ç¼è¾å¨ã

editElement(Object, int) å¼å§ç¼è¾æå®åç´ ã

getElementAt(int) ä»è¡¨æ ¼æ¥çå¨éè·åæå®åºåå·çåç´ ã

getTable() è¿å表格æ¥çå¨ç表格æ§ä»¶ã

insert(Object, int) å¨è¡¨æ ¼æ¥çå¨çæå®ä½ç½®æå¥æå®åç´ ã

isCellEditorActive() è¿åæ¯å¦å­å¨èµ·ä½ç¨çååæ ¼ç¼è¾å¨ã

remove(Object)ä»è¡¨æ ¼æ¥çå¨éå é¤æå®åç´ ãå½ä¸ä¸ªåç´ å·²ç»è¢«ä»æ°æ®æ¨¡å中å é¤ï¼å¸ææ¥çå¨è½å¤ååæ æ°æ®æ¨¡åçæ¶åï¼è°ç¨è¯¥æ¹æ³ãæ­¤æ¹æ³åªå½±åæ¥çå¨ï¼ä¸å½±åæ°æ®æ¨¡åã

remove(Object[]) ä»è¡¨æ ¼æ¥çå¨éå é¤æå®åç´ ãå½åç´ å·²ç»è¢«ä»æ°æ®æ¨¡å中å é¤ï¼å¸ææ¥çå¨è½å¤ååæ æ°æ®æ¨¡åçæ¶åï¼è°ç¨è¯¥æ¹æ³ãæ­¤æ¹æ³åªå½±åæ¥çå¨ï¼ä¸å½±åæ°æ®æ¨¡åã

reveal(Object) æ»å¨æ¥çå¨ï¼ä¿è¯æå®å素被æ¾ç¤ºã

setCellEditors(CellEditor[])为表格æ¥çå¨è®¾ç½®ååæ ¼ç¼è¾å¨ã

setCellModifier(ICellModifier)为表格æ¥çå¨è®¾ç½®ååæ ¼ä¿®æ¹å¨ã

setColumnProperties(String[]) 为表格æ¥çå¨è®¾ç½®å屿§ã

setLabelProvider(IBaseLabelProvider) 表格æ¥çå¨å®ç°äºViewer æ¡æ¶çæ­¤æ¹æ³ ä¿è¯è¾å¥çå容ä¾ç»å¨æ¯ ITableLabelProvider æ ILabelProviderã

The CheckboxTableViewer 常ç¨API忬:

addCheckStateListener(ICheckStateListener)为æ¥ç卿·»å éä¸­ç¶ææ¹åçå¬å¨ã

getChecked(Object)è¿åæå®åç´ çéä¸­ç¶æã

getCheckedElements() è¿åæ¥çå¨ä¸­é中åç´ å表ã

getGrayed(Object)è¿åæå®åç´ çæ³ç°ç¶æã

getGrayedElements() Rè¿åæ¥çå¨ä¸­æ³ç°åç´ å表ã

setAllChecked(boolean) 设置ææåç´ æ¯å¦è¢«é中ã

setAllGrayed(boolean) 设置ææåç´ æ¯å¦æ³ç°ã

setChecked(Object, boolean) 设置æå®åç´ æ¯å¦è¢«é中ã

setCheckedElements(Object[]) 设置æå®å素被é中ã

setGrayed(Object, boolean) 设置æå®åç´ æ¯å¦æ³ç°ã

setGrayedElements(Object[]) 设置æå®åç´ æ³ç°ã

ä¸é¢çç¨åºæ ·ä¾å建ä¸ä¸ªæ¥æååç表格æ¥çå¨ã (åè§Figure 5-9
Figure 5-9. TableViewer æ ·ä¾


import org.eclipse.jface.viewers.*;
import org.eclipse.swt.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;

public class TableViewerExample {
   public static void main(String[] args) {
      Display display = new Display();
      Shell shell = new Shell(display);
      shell.setText("Table Viewer Example");
      shell.setBounds(100, 100, 325, 200);
      shell.setLayout(new FillLayout());

      final TableViewer tableViewer = new TableViewer(
         shell, SWT.SINGLE | SWT.FULL_SELECTION);
      final Table table = tableViewer.getTable();
      table.setHeaderVisible(true);
      table.setLinesVisible(true);

      String[] columnNames = new String[] {
         "First Name", "Last Name", "Age", "Num Children"};
      int[] columnWidths = new int[] {
         100, 100, 35, 75};
      int[] columnAlignments = new int[] {
         SWT.LEFT, SWT.LEFT, SWT.CENTER, SWT.CENTER};
      for (int i = 0; i < columnNames.length; i++) {
         TableColumn tableColumn =
            new TableColumn(table, columnAlignments[i]);
         tableColumn.setText(columnNames[i]);
         tableColumn.setWidth(columnWidths[i]);
      }

      tableViewer.setLabelProvider(
         new PersonTableLabelProvider());
      tableViewer.setContentProvider(
         new ArrayContentProvider());
      tableViewer.setInput(Person.example());

      shell.open();
      while (!shell.isDisposed()) {
         if (!display.readAndDispatch()) display.sleep();
      }
      display.dispose();
   }
}

å建表格æ¥çå¨åï¼è°ç¨setHeaderVisible() å setLinesVisible() æ¹æ³ä½¿å表头å¯è§ï¼è¡¨æ ¼çº¿å¯è§ãç¶åå å¥ååçä¿¡æ¯ãéè¿setText() å setWidth() æ¹æ³è®¾ç½®å表头çæå­å宽度ã(åè§ 7.8 è, èªå¨è°æ´è¡¨æ ¼å)ã ä½¿ç¨ setLabelProvider()æ¹æ³è®¾ç½®æ ç­¾ä¾ç»å¨ï¼ 使ç¨setContentProvider() æ¹æ³è®¾ç½®å容ä¾ç»å¨ãæ ç­¾ä¾ç»å¨PersonTableLabelProvider, ç¨æ¥è¿å表格æ¯ä¸åçæå­æ ç­¾ï¼æ²¡æè¿å徿 ã ç¨åºå¦ä¸:
import org.eclipse.jface.viewers.*;
import org.eclipse.swt.graphics.*;

public class PersonTableLabelProvider
   extends LabelProvider
   implements ITableLabelProvider {
   public Image getColumnImage(
      Object element, int) {
       return null;
   }
   public String getColumnText(Object element, int index) {
      Person person = (Person) element;
      switch (index) {
         case 0 :
            return person.firstName;
         case 1 :
            return person.lastName;
         case 2 :
            return Integer.toString(person.age);
         case 3 :
            return Integer.toString(person.children.length);
         default :
            return "unknown " + index;
      }
   }
}

基于数据挖掘的音乐推荐系统设计与实现 需要一个代码说明,不需要论文 采用python语言,django框架,mysql数据库开发 编程环境:pycharm,mysql8.0 系统分为前台+后台模式开发 网站前台: 用户注册, 登录 搜索音乐,音乐欣赏(可以在线进行播放) 用户登陆时选择相关感兴趣的音乐风格 音乐收藏 音乐推荐算法:(重点) 本课题需要大量用户行为(如播放记录、收藏列表)、音乐特征(如音频特征、歌曲元数据)等数据 (1)根据用户之间相似性或关联性,给一个用户推荐与其相似或有关联的其他用户所感兴趣的音乐; (2)根据音乐之间的相似性或关联性,给一个用户推荐与其感兴趣的音乐相似或有关联的其他音乐。 基于用户的推荐和基于物品的推荐 其中基于用户的推荐是基于用户的相似度找出相似相似用户,然后向目标用户推荐其相似用户喜欢的东西(和你类似的人也喜欢**东西); 而基于物品的推荐是基于物品的相似度找出相似的物品做推荐(喜欢该音乐的人还喜欢了**音乐); 管理员 管理员信息管理 注册用户管理,审核 音乐爬虫(爬虫方式爬取网站音乐数据) 音乐信息管理(上传歌曲MP3,以便前台播放) 音乐收藏管理 用户 用户资料修改 我的音乐收藏 完整前后端源码,部署后可正常运行! 环境说明 开发语言:python后端 python版本:3.7 数据库:mysql 5.7+ 数据库工具:Navicat11+ 开发软件:pycharm
MPU6050是一款广泛应用在无人机、机器人和运动设备中的六轴姿态传感器,它集成了三轴陀螺仪和三轴加速度计。这款传感器能够实时监测并提供设备的角速度和线性加速度数据,对于理解物体的动态运动状态至关重要。在Arduino平台上,通过特定的库文件可以方便地与MPU6050进行通信,获取并解析传感器数据。 `MPU6050.cpp`和`MPU6050.h`是Arduino库的关键组成部分。`MPU6050.h`是头文件,包含了定义传感器接口和函数声明。它定义了类`MPU6050`,该类包含了初始化传感器、读取数据等方法。例如,`begin()`函数用于设置传感器的工作模式和I2C地址,`getAcceleration()`和`getGyroscope()`则分别用于获取加速度和角速度数据。 在Arduino项目中,首先需要包含`MPU6050.h`头文件,然后创建`MPU6050`对象,并调用`begin()`函数初始化传感器。之后,可以通过循环调用`getAcceleration()`和`getGyroscope()`来不断更新传感器读数。为了处理这些原始数据,通常还需要进行校准和滤波,以消除噪声和漂移。 I2C通信协议是MPU6050与Arduino交互的基础,它是一种低引脚数的串行通信协议,允许多个设备共享一对数据线。Arduino板上的Wire库提供了I2C通信的底层支持,使得用户无需深入了解通信细节,就能方便地与MPU6050交互。 MPU6050传感器的数据包括加速度(X、Y、Z轴)和角速度(同样为X、Y、Z轴)。加速度数据可以用来计算物体的静态位置和动态运动,而角速度数据则能反映物体转动的速度。结合这两个数据,可以进一步计算出物体的姿态(如角度和角速度变化)。 在嵌入式开发领域,特别是使用STM32微控制器时,也可以找到类似的库来驱动MPU6050。STM32通常具有更强大的处理能力和更多的GPIO口,可以实现更复杂的控制算法。然而,基本的传感器操作流程和数据处理原理与Arduino平台相似。 在实际应用中,除了基本的传感器读取,还可能涉及到温度补偿、低功耗模式设置、DMP(数字运动处理器)功能的利用等高级特性。DMP可以帮助处理传感器数据,实现更高级的运动估计,减轻主控制器的计算负担。 MPU6050是一个强大的六轴传感器,广泛应用于各种需要实时运动追踪的项目中。通过 Arduino 或 STM32 的库文件,开发者可以轻松地与传感器交互,获取并处理数据,实现各种创新应用。博客和其他开源资源是学习和解决问题的重要途径,通过这些资源,开发者可以获得关于MPU6050的详细信息和实践指南
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值