2

タブのコンテンツは、アプリケーションのロード時に形成されて表示されます。その後、タブの内容は他のアクションによって変更される可能性があります。各アクションの後に新しいコンテンツを表示したい。タブシートをクリックするたびに、コンテンツが更新/更新されます。しかし、私は失敗しました。

    //the content of the tab from the "reprintsTab" class
    //in the "reprintsTab" it query data from database and print out
    //later I update the data in the database from somewhere else, and I want the tab shows the new content
    //I want to click the tab sheet to reload the "reprintTab" class and print out the new content

    //here is what I did:

    public TabSheet sheet;

    //add tab and add the content from "reprintTab" into this tab
    sheet.addTab(new reprintsTab());

    //add the listener 
    sheet.addListener(new TabSheet.SelectedTabChangeListener() {

        @Override
        public void selectedTabChange(SelectedTabChangeEvent event) {

        //I know it does not work, because it only reload the class. but not put the content under the tab I want
        new reprintsTab();

        }
    });

私は何をすべきか?助けてください、ありがとう。

4

1 に答える 1

3

これを行うには、 TabSheet.replaceComponentメソッドを使用できます。

//Field to store current component
private reprintsTab currentComponent; 

//during initialization
currentComponent = new reprintsTab();
sheet.addTab(currentComponent);

sheet.addListener(new TabSheet.SelectedTabChangeListener() {
    @Override
    public void selectedTabChange(SelectedTabChangeEvent event) {
        reprintsTab newComponent = new reprintsTab();
        sheet.replaceComponent(currentComponent, newComponent);
        currentComponent = newComponent;
    }
});

また、このタブが表示されている場合にのみ、このタブをリロードすることもできます。

sheet.addListener(new TabSheet.SelectedTabChangeListener() {
        @Override
        public void selectedTabChange(SelectedTabChangeEvent event) {
            if (event.getTabSheet().getSelectedTab() == currentComponent) {
                //here goes the code
            }
        }
});

これはうまくいくはずですが、よりクリーンなアプローチをお勧めしreprintsTabます。コンポーネントのコンテナーとして実装し、メソッドreloadまたはbuildInterfaceメソッドを作成してその状態を更新するため、次のように呼び出すことができます。

currentComponent.reload();

インターフェイスを更新する必要がある場合。

また、名前の例にすぎないことを願っreprintsTabています。小文字で始まるJavaクラスの名前は醜く見えます。

于 2013-03-13T07:56:55.043 に答える