初めて JFace MasterDetailsPart を使用する際に問題が発生しました。詳細ページが表示されず、新しいアイテムを選択してもイベントが発生しません。これに関する良い例やチュートリアルは見つかりませんでした。JavaDoc でさえ役に立ちませんでした。
detailspart は、初期化時に IDetailsPart と SYSOUT のメッセージを実装するだけですが (表示されています)、Label は表示されません: DetailsPart コードは次のとおりです。
public class Einzelansicht implements IDetailsPage{
public Einzelansicht() {
// TODO Auto-generated constructor stub
}
@Override
public void commit(boolean arg0) {
// TODO Auto-generated method stub
}
@Override
public void dispose() {
// TODO Auto-generated method stub
}
@Override
public void initialize(IManagedForm arg0) {
System.out.println("initialize");
}
@Override
public boolean isDirty() {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean isStale() {
// TODO Auto-generated method stub
return false;
}
@Override
public void refresh() {
// TODO Auto-generated method stub
}
@Override
public void setFocus() {
// TODO Auto-generated method stub
}
@Override
public boolean setFormInput(Object arg0) {
// TODO Auto-generated method stub
return false;
}
@Override
public void selectionChanged(IFormPart arg0, ISelection arg1) {
System.out.println("!!");
}
@Override
public void createContents(Composite arg0) {
arg0.setLayout(new GridLayout());
Label label = new Label(arg0, 0);
label.setText("Einzel");
}
}
ここでは、失敗するはずの特別なことは何もないと思います。今私のMasterDetaislBlock:
public class BlockZwei extends MasterDetailsBlock {
private FormToolkit toolkit;
private IManagedForm form;
/**
* Create the master details block.
*/
public BlockZwei() {
// Create the master details block
}
/**
* Create contents of the master details block.
*
* @param managedForm
* @param parent
*/
@Override
protected void createMasterPart(final IManagedForm managedForm,
Composite parent) {
toolkit = managedForm.getToolkit();
//
form = managedForm;
final TableViewer tableViewer = new TableViewer(parent);
ArrayContentProvider arrayContent = ArrayContentProvider.getInstance();
tableViewer.setContentProvider(arrayContent);
String[] strings = new String[] { "Eins", "Zwei" };
tableViewer.setInput(strings);
tableViewer
.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent arg0) {
managedForm.fireSelectionChanged(detailsPart, arg0.getSelection());
}
});
}
/**
* Register the pages.
*
* @param part
*/
@Override
protected void registerPages(DetailsPart part) {
part.registerPage(Einzelansicht.class, new Einzelansicht());
}
ご覧のとおり、リスナーをセレクションに登録します。私が理解している限り、イベントは詳細ページでイベントをトリガーする必要があります。最後になりましたが、MDB を使用した ViewPart
public class View extends ViewPart {
public static final String ID = "EclipseRCPStinkt.view";
/**
* This is a callback that will allow us to create the viewer and initialize
* it.
*/
public void createPartControl(Composite parent) {
ManagedForm managed = new ManagedForm(parent);
BlockZwei block = new BlockZwei();
block.createContent(managed);
managed.refresh();
}
/**
* Passing the focus request to the viewer's control.
*/
public void setFocus() {
}
}
私は何かを呼び出すのを忘れましたか?私は本当に自分の間違いを見つけることができませんでした