2016-11-02 4 views
0

ウィザードを作成するという目的でSWTを学習しています。私は既存のチュートリアルを変更しています。この時点で、私は、ウィザードの1ページ内の画像を表示しようとしています:表示なしでJava SWTでイメージを作成する方法

class FrontPage extends WizardPage { 

    FrontPage() { 
    super("FrontPage"); 
    setTitle("Listes des joueurs"); 
    setDescription("Veuillez déplacer toutes les listes dans le même fichier (ex: C:\\Badminton\\)"); 
    } 

    public void createControl(Composite parent) { 
    Composite composite = new Composite(parent, SWT.NULL); 
    GridLayout gridLayout = new GridLayout(2, false); 
    composite.setLayout(gridLayout); 

    Canvas canvas = new Canvas(composite, SWT.NONE); 
    canvas.setBounds(10, 10, 693, 253); 

    canvas.addPaintListener(new PaintListener() { 
     public void paintControl(PaintEvent e) { 
     Image image = new Image(null, "C:\\Benoit\\Work\\Java\\Badminton\\Folder_List_Players.png"); 

     e.gc.drawImage(image, 10, 10); 

     image.dispose(); 
     } 
    }); 

    setControl(composite); 

    } 

}

をこのコードを実行すると、およそ600 200によってである私のイメージは、サムネイルとして表示されます(10x10)。私はフルサイズで表示したいと思います。

  1. ImageコンストラクタにDisplayオブジェクトが含まれている可能性があることを理解していますが、Composite親オブジェクトで動作させる方法がわかりません。ただし、null Displayオブジェクトでイメージを表示できるのは面白いです。

  2. canvas.setBounds(10、10、693、253);何の影響もないようです。

事前のご意見ありがとうございました!!!

答えて

3

画像がヌルディスプレイで作成された場合、現在のディスプレイが使用されます。わかりやすくするために、画像を作成するときは常にディスプレイを用意する必要があります。画像を表示するために

Display display = event.display; 

又は

Display display = parent.getDisplay(); 

、このようなLabelを使用して好む:

、現在ディスプレイへの参照の不足は、例えば、いずれかが存在しない

Label imageLabel = new Label(parent, SWT.NONE); 
imageLabel.setImage(...); 

レイアウトコントロールには、setBounds()とa絶対座標。代わりにレイアウトマネージャを使用してください:https://www.eclipse.org/articles/article.php?file=Article-Understanding-Layouts/index.html

+0

ありがとう、私のイメージは正しく表示されます! –

+1

@BenoitGoderre Display.getCurrent()またはDisplay.getDefault()は、表示を取得するための他の方法です。 – Baz

+0

ありがとうございました! :) –

関連する問題