一、前言
在《Eclipse从入门到精通》一书中,TableViewer的例子还是被相对简化了的,今天(2005年8月30日)在开发中正好涉及到这方面,于是将代码提取出来,帖在这里以供读者参考。
二、实例说明
实例的示例图如下:
例图说明:
(1)提供一个表格,表格有两列。第一列是一个文本框,可直接编辑。第二列是一个下拉框。
(2)实现“删除”按钮的功能,但“新增、修改”按钮功能未实现
(3)当点击“OK”按钮时,则界面上的数据情况打印出来。如下图。
其他说明:
(1) 本文的数据涉及到Log4j,读者需要了解一些Log4j的Level类的知识。Log4j的文档,网上一搜一大把,本文就省略不说了。
(2)因为要用到log4j,所以需要log4j的jar包加入到引用库中。(操作方法参考书的P261)
三、程序实现
第一步:构造数据模型。经过对界面的数据进行分析后,创建一个数据类,代码如下:
import java.util.ArrayList;
import java.util.List;
public class LogMonitorSet {
private String name;
private boolean selected;
private int logLevel;
private List loggers = new ArrayList(1);
public List getLoggers() {
return loggers;
}
public void setLoggers(List loggers) {
this.loggers = loggers;
}
public void addLogger(String logger) {
this.loggers.add(logger);
}
public void removeLogger(String logger) {
this.loggers.remove(logger);
}
public int getLogLevel() {
return logLevel;
}
public void setLogLevel(int logLevel) {
this.logLevel = logLevel;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean getSelection() {
return selected;
}
public void setSelection(boolean selected) {
this.selected = selected;
}
}
说明:
(1)name相对于表格中的“集合名称”
(2)selected相对于表格中的Check框
(3)logLevel相对于表格中的“日志级别”
(4)loggers这个属性是为以后用的,本文读者不必管它。
第二步:实例主界面程序
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Level;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.ComboBoxCellEditor;
import org.eclipse.jface.viewers.ICellModifier;
import org.eclipse.jface.viewers.ICheckStateListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TableLayout;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
/**
* @author ChenGang
*/
public class LogMonitorDialog extends Dialog {
private TableViewer tv;
private CheckboxTableViewer ctv;
private String[] levelStrArray = LogHelper.getLevelShowStrings();
public LogMonitorDialog(Shell parentShell) {
super(parentShell);
}
protected Control createDialogArea(Composite parent) {
Composite topComp = new Composite(parent, SWT.NONE);
topComp.setLayoutData(new GridData(GridData.FILL_BOTH)); //加此一句张开面板
topComp.setLayout(new GridLayout());
{
tv = new TableViewer(topComp, SWT.CHECK | SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION);
tv.setUseHashlookup(true);
ctv = new CheckboxTableViewer(tv.getTable());
Table table = tv.getTable();
table.setHeaderVisible(true); //显示表头
table.setLinesVisible(true); //显示表格线
GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
gridData.heightHint = 100;
table.setLayoutData(gridData);
TableLayout tLayout = new TableLayout(); //专用于表格的布局
table.setLayout(tLayout);
//建立TableViewer中的列
tLayout.addColumnData(new ColumnWeightData(40));
new TableColumn(table, SWT.NONE).setText("集合名称");
tLayout.addColumnData(new ColumnWeightData(40));
new TableColumn(table, SWT.NONE).setText("日志级别");
{
tv.setColumnProperties(new String[] { "name", "level" });//定义每一列的别名
CellEditor[] cellEditors = new CellEditor[2];
cellEditors[0] = new TextCellEditor(table);
cellEditors[1] = new ComboBoxCellEditor(table, levelStrArray, SWT.READ_ONLY);
tv.setCellEditors(cellEditors);
}
tv.setContentProvider(new DefaultContentProvider());
tv.setLabelProvider(new MyLabelProvider(ctv));
tv.setCellModifier(new MyCellModifier());
tv.setInput(getInputData());
ctv.addCheckStateListener(new ICheckStateListener() {
public void checkStateChanged(CheckStateChangedEvent event) {
LogMonitorSet o = (LogMonitorSet) event.getElement();
o.setSelection(event.getChecked());
}
});
}
{
Composite comp = new Composite(topComp, SWT.NONE);
comp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
comp.setLayout(new RowLayout());
Button addButton = new Button(comp, SWT.PUSH);
addButton.setText(" 新增 ");
addButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
//TODO
}
});
Button editButton = new Button(comp, SWT.PUSH);
editButton.setText(" 修改 ");
editButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
//TODO
}
});
Button removeButton = new Button(comp, SWT.PUSH);
removeButton.setText(" 删除 ");
removeButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
IStructuredSelection selection = (IStructuredSelection) tv.getSelection();
LogMonitorSet m = (LogMonitorSet) ((selection).getFirstElement());
if (m != null) {
//先预先移动到下一行
Table table = tv.getTable();
int i = table.getSelectionIndex(); //取得当前所选行的序号,如没有则返回-1
table.setSelection(i + 1); //当前选择行移下一行
//删除
tv.remove(m);//从界面上删除
((List) tv.getInput()).remove(m); //从数据模型中删除
}
}
});
}
return topComp;
}
private List getInputData() {
//Test code
List list = new ArrayList(3);
{
LogMonitorSet lms = new LogMonitorSet();
lms.setSelection(false);
lms.setName("aaaaa");
lms.setLogLevel(Level.INFO_INT);
list.add(lms);
}
{
LogMonitorSet lms = new LogMonitorSet();
lms.setSelection(true);
lms.setName("bbbb");
lms.setLogLevel(Level.DEBUG_INT);
list.add(lms);
}
{
LogMonitorSet lms = new LogMonitorSet();
lms.setSelection(false);
lms.setName("cccc");
lms.setLogLevel(Level.ERROR_INT);
lms.addLogger("com.wxxr.jboss");
lms.addLogger("com.wxxr.sms");
list.add(lms);
}
return list;
// return Collections.EMPTY_LIST;
}
public LogMonitorSet[] getDialogData() {
List list = (List) tv.getInput();
LogMonitorSet[] array = new LogMonitorSet[list.size()];
list.toArray(array);
return array;
}
/**
* 标签器
*/
private final static class MyLabelProvider extends TableLabelProviderAdapter {
private CheckboxTableViewer ctv;
public MyLabelProvider(CheckboxTableViewer ctv) {
this.ctv = ctv;
}
public String getColumnText(Object element, int col) {
LogMonitorSet o = (LogMonitorSet) element;
if (col == 0) {
ctv.setChecked(o, o.getSelection());
return o.getName();
}
if (col == 1) {
return LogHelper.getLevelShowString(o.getLogLevel());
}
return "";
}
}
/**
* 修改方法类
*/
private class MyCellModifier implements ICellModifier {
/**
* 是否可以修改此单元格。这里设置了任一单元格都可以修改。
* @param element 表格记录对象
* @param property 列的别名
*/
public boolean canModify(Object element, String property) {
return true;
}
/**
* 由此方法决定,当单击单元格出现CellEditor时应该显示什么值。
*/
public Object getValue(Object element, String property) {
LogMonitorSet o = (LogMonitorSet) element;
if (property.equals("name")) {
return o.getName();
}
if (property.equals("level")) {
int index = LogHelper.getLevelIndex(o.getLogLevel());
return new Integer(index);
}
return "";
}
/**
* 从CellEditor取值得此单元格的值。
* @param value 修改的新值
*/
public void modify(Object element, String property, Object value) {
TableItem tableItem = (TableItem) element;
LogMonitorSet o = (LogMonitorSet) tableItem.getData();
if (property.equals("name")) {
String newValue = (String) value;
if (!o.getName().equals(newValue)) {
o.setName(newValue);
tv.update(o, null);//或 tv.refresh(); 确认并更新修改
}
}
if (property.equals("level")) {
Integer newValue = (Integer) value;
String levelStr = levelStrArray[newValue.intValue()];
int levelInt = LogHelper.getLevelInt(levelStr);
if (o.getLogLevel() != levelInt) {
o.setLogLevel(levelInt);
tv.update(o, null);//或 tv.refresh(); 确认并更新修改
}
}
}
}
}
上面的类用到的一些类的代码如下:
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.swt.graphics.Image;
/**
* 标签器的适配器,提供一些不常用方法的空实现,以助简化代码
* @author ChenGang
* @version 1.0 2004-5-8
*/
public abstract class TableLabelProviderAdapter implements ITableLabelProvider {
public Image getColumnImage(Object arg0, int arg1) {
return null;
}
public boolean isLabelProperty(Object arg0, String arg1) {
return false;
}
public void addListener(ILabelProviderListener arg0) {}
public void removeListener(ILabelProviderListener arg0) {}
public void dispose() {}
}
import java.util.List;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.Viewer;
/**
* 一个默认实现的内容器
* @author ChenGang
* @version 1.0, 2004-5-14
*/
public class DefaultContentProvider implements IStructuredContentProvider {
public Object[] getElements(Object element) {
if (element instanceof List)
return ((List) element).toArray();
if (element instanceof Object[])
return (Object[]) element;
return new Object[0];
}
public void dispose() {}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {}
}
import org.apache.log4j.Level;
public class LogHelper {
public static final int NONE = -1;
private LogHelper() {}
public static String getLevelShowString(Level level) {
// return AdminConsolePlugin.getResourceString(level.toString());
return level.toString() + "(中文)";
}
public static String getLevelShowString(int levelInt) {
Level level = Level.toLevel(levelInt);
return getLevelShowString(level);
}
public static String[] getLevelShowStrings() {
String[] strs = new String[5];
strs[0] = getLevelShowString(Level.DEBUG);
strs[1] = getLevelShowString(Level.INFO);
strs[2] = getLevelShowString(Level.WARN);
strs[3] = getLevelShowString(Level.ERROR);
strs[4] = getLevelShowString(Level.FATAL);
return strs;
}
private static Level[] getLevels() {
Level[] levels = new Level[5];
levels[0] = Level.DEBUG;
levels[1] = Level.INFO;
levels[2] = Level.WARN;
levels[3] = Level.ERROR;
levels[4] = Level.FATAL;
return levels;
}
public static int getLevelInt(String levelShowString) {
String[] strs = getLevelShowStrings();
Level[] levels = getLevels();
for (int i = 0; i < strs.length; i++) {
if (strs.equals(levelShowString)) {
return levels.toInt();
}
}
return NONE;
}
public static int getLevelIndex(int levelInt) {
Level[] levels = getLevels();
for (int i = 0; i < levels.length; i++) {
if (levels.toInt() == levelInt) {
return i;
}
}
return NONE;
}
}
最后是入口程序,把这个程序当成SWT程序运行。
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.widgets.Shell;
public class TestLogMonitorDialog {
public static void main(String[] args) {
Shell shell = new Shell();
LogMonitorDialog d = new LogMonitorDialog(shell);
if (d.open() == IDialogConstants.OK_ID) {
LogMonitorSet[] lms = d.getDialogData();
for (int i = 0; i < lms.length; i++) {
LogMonitorSet o = lms;
System.out.println(o.getSelection() + "__" + o.getName() + "__" + LogHelper.getLevelShowString(o.getLogLevel()));
}
}
}
}
在《Eclipse从入门到精通》一书中,TableViewer的例子还是被相对简化了的,今天(2005年8月30日)在开发中正好涉及到这方面,于是将代码提取出来,帖在这里以供读者参考。
二、实例说明
实例的示例图如下:
例图说明:
(1)提供一个表格,表格有两列。第一列是一个文本框,可直接编辑。第二列是一个下拉框。
(2)实现“删除”按钮的功能,但“新增、修改”按钮功能未实现
(3)当点击“OK”按钮时,则界面上的数据情况打印出来。如下图。
其他说明:
(1) 本文的数据涉及到Log4j,读者需要了解一些Log4j的Level类的知识。Log4j的文档,网上一搜一大把,本文就省略不说了。
(2)因为要用到log4j,所以需要log4j的jar包加入到引用库中。(操作方法参考书的P261)
三、程序实现
第一步:构造数据模型。经过对界面的数据进行分析后,创建一个数据类,代码如下:
import java.util.ArrayList;
import java.util.List;
public class LogMonitorSet {
private String name;
private boolean selected;
private int logLevel;
private List loggers = new ArrayList(1);
public List getLoggers() {
return loggers;
}
public void setLoggers(List loggers) {
this.loggers = loggers;
}
public void addLogger(String logger) {
this.loggers.add(logger);
}
public void removeLogger(String logger) {
this.loggers.remove(logger);
}
public int getLogLevel() {
return logLevel;
}
public void setLogLevel(int logLevel) {
this.logLevel = logLevel;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean getSelection() {
return selected;
}
public void setSelection(boolean selected) {
this.selected = selected;
}
}
说明:
(1)name相对于表格中的“集合名称”
(2)selected相对于表格中的Check框
(3)logLevel相对于表格中的“日志级别”
(4)loggers这个属性是为以后用的,本文读者不必管它。
第二步:实例主界面程序
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Level;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.ComboBoxCellEditor;
import org.eclipse.jface.viewers.ICellModifier;
import org.eclipse.jface.viewers.ICheckStateListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TableLayout;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
/**
* @author ChenGang
*/
public class LogMonitorDialog extends Dialog {
private TableViewer tv;
private CheckboxTableViewer ctv;
private String[] levelStrArray = LogHelper.getLevelShowStrings();
public LogMonitorDialog(Shell parentShell) {
super(parentShell);
}
protected Control createDialogArea(Composite parent) {
Composite topComp = new Composite(parent, SWT.NONE);
topComp.setLayoutData(new GridData(GridData.FILL_BOTH)); //加此一句张开面板
topComp.setLayout(new GridLayout());
{
tv = new TableViewer(topComp, SWT.CHECK | SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION);
tv.setUseHashlookup(true);
ctv = new CheckboxTableViewer(tv.getTable());
Table table = tv.getTable();
table.setHeaderVisible(true); //显示表头
table.setLinesVisible(true); //显示表格线
GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
gridData.heightHint = 100;
table.setLayoutData(gridData);
TableLayout tLayout = new TableLayout(); //专用于表格的布局
table.setLayout(tLayout);
//建立TableViewer中的列
tLayout.addColumnData(new ColumnWeightData(40));
new TableColumn(table, SWT.NONE).setText("集合名称");
tLayout.addColumnData(new ColumnWeightData(40));
new TableColumn(table, SWT.NONE).setText("日志级别");
{
tv.setColumnProperties(new String[] { "name", "level" });//定义每一列的别名
CellEditor[] cellEditors = new CellEditor[2];
cellEditors[0] = new TextCellEditor(table);
cellEditors[1] = new ComboBoxCellEditor(table, levelStrArray, SWT.READ_ONLY);
tv.setCellEditors(cellEditors);
}
tv.setContentProvider(new DefaultContentProvider());
tv.setLabelProvider(new MyLabelProvider(ctv));
tv.setCellModifier(new MyCellModifier());
tv.setInput(getInputData());
ctv.addCheckStateListener(new ICheckStateListener() {
public void checkStateChanged(CheckStateChangedEvent event) {
LogMonitorSet o = (LogMonitorSet) event.getElement();
o.setSelection(event.getChecked());
}
});
}
{
Composite comp = new Composite(topComp, SWT.NONE);
comp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
comp.setLayout(new RowLayout());
Button addButton = new Button(comp, SWT.PUSH);
addButton.setText(" 新增 ");
addButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
//TODO
}
});
Button editButton = new Button(comp, SWT.PUSH);
editButton.setText(" 修改 ");
editButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
//TODO
}
});
Button removeButton = new Button(comp, SWT.PUSH);
removeButton.setText(" 删除 ");
removeButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
IStructuredSelection selection = (IStructuredSelection) tv.getSelection();
LogMonitorSet m = (LogMonitorSet) ((selection).getFirstElement());
if (m != null) {
//先预先移动到下一行
Table table = tv.getTable();
int i = table.getSelectionIndex(); //取得当前所选行的序号,如没有则返回-1
table.setSelection(i + 1); //当前选择行移下一行
//删除
tv.remove(m);//从界面上删除
((List) tv.getInput()).remove(m); //从数据模型中删除
}
}
});
}
return topComp;
}
private List getInputData() {
//Test code
List list = new ArrayList(3);
{
LogMonitorSet lms = new LogMonitorSet();
lms.setSelection(false);
lms.setName("aaaaa");
lms.setLogLevel(Level.INFO_INT);
list.add(lms);
}
{
LogMonitorSet lms = new LogMonitorSet();
lms.setSelection(true);
lms.setName("bbbb");
lms.setLogLevel(Level.DEBUG_INT);
list.add(lms);
}
{
LogMonitorSet lms = new LogMonitorSet();
lms.setSelection(false);
lms.setName("cccc");
lms.setLogLevel(Level.ERROR_INT);
lms.addLogger("com.wxxr.jboss");
lms.addLogger("com.wxxr.sms");
list.add(lms);
}
return list;
// return Collections.EMPTY_LIST;
}
public LogMonitorSet[] getDialogData() {
List list = (List) tv.getInput();
LogMonitorSet[] array = new LogMonitorSet[list.size()];
list.toArray(array);
return array;
}
/**
* 标签器
*/
private final static class MyLabelProvider extends TableLabelProviderAdapter {
private CheckboxTableViewer ctv;
public MyLabelProvider(CheckboxTableViewer ctv) {
this.ctv = ctv;
}
public String getColumnText(Object element, int col) {
LogMonitorSet o = (LogMonitorSet) element;
if (col == 0) {
ctv.setChecked(o, o.getSelection());
return o.getName();
}
if (col == 1) {
return LogHelper.getLevelShowString(o.getLogLevel());
}
return "";
}
}
/**
* 修改方法类
*/
private class MyCellModifier implements ICellModifier {
/**
* 是否可以修改此单元格。这里设置了任一单元格都可以修改。
* @param element 表格记录对象
* @param property 列的别名
*/
public boolean canModify(Object element, String property) {
return true;
}
/**
* 由此方法决定,当单击单元格出现CellEditor时应该显示什么值。
*/
public Object getValue(Object element, String property) {
LogMonitorSet o = (LogMonitorSet) element;
if (property.equals("name")) {
return o.getName();
}
if (property.equals("level")) {
int index = LogHelper.getLevelIndex(o.getLogLevel());
return new Integer(index);
}
return "";
}
/**
* 从CellEditor取值得此单元格的值。
* @param value 修改的新值
*/
public void modify(Object element, String property, Object value) {
TableItem tableItem = (TableItem) element;
LogMonitorSet o = (LogMonitorSet) tableItem.getData();
if (property.equals("name")) {
String newValue = (String) value;
if (!o.getName().equals(newValue)) {
o.setName(newValue);
tv.update(o, null);//或 tv.refresh(); 确认并更新修改
}
}
if (property.equals("level")) {
Integer newValue = (Integer) value;
String levelStr = levelStrArray[newValue.intValue()];
int levelInt = LogHelper.getLevelInt(levelStr);
if (o.getLogLevel() != levelInt) {
o.setLogLevel(levelInt);
tv.update(o, null);//或 tv.refresh(); 确认并更新修改
}
}
}
}
}
上面的类用到的一些类的代码如下:
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.swt.graphics.Image;
/**
* 标签器的适配器,提供一些不常用方法的空实现,以助简化代码
* @author ChenGang
* @version 1.0 2004-5-8
*/
public abstract class TableLabelProviderAdapter implements ITableLabelProvider {
public Image getColumnImage(Object arg0, int arg1) {
return null;
}
public boolean isLabelProperty(Object arg0, String arg1) {
return false;
}
public void addListener(ILabelProviderListener arg0) {}
public void removeListener(ILabelProviderListener arg0) {}
public void dispose() {}
}
import java.util.List;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.Viewer;
/**
* 一个默认实现的内容器
* @author ChenGang
* @version 1.0, 2004-5-14
*/
public class DefaultContentProvider implements IStructuredContentProvider {
public Object[] getElements(Object element) {
if (element instanceof List)
return ((List) element).toArray();
if (element instanceof Object[])
return (Object[]) element;
return new Object[0];
}
public void dispose() {}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {}
}
import org.apache.log4j.Level;
public class LogHelper {
public static final int NONE = -1;
private LogHelper() {}
public static String getLevelShowString(Level level) {
// return AdminConsolePlugin.getResourceString(level.toString());
return level.toString() + "(中文)";
}
public static String getLevelShowString(int levelInt) {
Level level = Level.toLevel(levelInt);
return getLevelShowString(level);
}
public static String[] getLevelShowStrings() {
String[] strs = new String[5];
strs[0] = getLevelShowString(Level.DEBUG);
strs[1] = getLevelShowString(Level.INFO);
strs[2] = getLevelShowString(Level.WARN);
strs[3] = getLevelShowString(Level.ERROR);
strs[4] = getLevelShowString(Level.FATAL);
return strs;
}
private static Level[] getLevels() {
Level[] levels = new Level[5];
levels[0] = Level.DEBUG;
levels[1] = Level.INFO;
levels[2] = Level.WARN;
levels[3] = Level.ERROR;
levels[4] = Level.FATAL;
return levels;
}
public static int getLevelInt(String levelShowString) {
String[] strs = getLevelShowStrings();
Level[] levels = getLevels();
for (int i = 0; i < strs.length; i++) {
if (strs.equals(levelShowString)) {
return levels.toInt();
}
}
return NONE;
}
public static int getLevelIndex(int levelInt) {
Level[] levels = getLevels();
for (int i = 0; i < levels.length; i++) {
if (levels.toInt() == levelInt) {
return i;
}
}
return NONE;
}
}
最后是入口程序,把这个程序当成SWT程序运行。
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.widgets.Shell;
public class TestLogMonitorDialog {
public static void main(String[] args) {
Shell shell = new Shell();
LogMonitorDialog d = new LogMonitorDialog(shell);
if (d.open() == IDialogConstants.OK_ID) {
LogMonitorSet[] lms = d.getDialogData();
for (int i = 0; i < lms.length; i++) {
LogMonitorSet o = lms;
System.out.println(o.getSelection() + "__" + o.getName() + "__" + LogHelper.getLevelShowString(o.getLogLevel()));
}
}
}
}