0

Windows で SWT 用の新しい行コマンドはありますか? そうでない場合、ここで何が間違っていますか?

これがコードです

    public static void main (String [] args) {
    Display display = new Display();
    Shell shell = new TabsTest().createShell(display);
    shell.setSize(350,500);
    shell.open();
    while (!shell.isDisposed()) {
        if (!display.readAndDispatch())
            display.sleep();
    }
}

private Shell createShell(final Display display) {
    final Shell shell = new Shell(display);
    shell.setText("Betting Tracker");

    //Creating grid layout, used to organize the shell
    GridLayout gridLayout = new GridLayout();
    gridLayout.numColumns = 20;
    shell.setLayout(gridLayout);

    //Grid1
    GridData gridData = new GridData(GridData.FILL, GridData.CENTER, true, false);
    gridData.horizontalSpan = 20;

    new Label(shell, SWT.NONE).setText("Bet Type:");
        betType = new Combo(shell, SWT.SINGLE | SWT.BORDER);
        betType.setItems(new String[] {"   ", "NFL", "NBA", "CFB"});
        betType.setLayoutData(gridData);

    //Grid2
    GridData gridData2 = new GridData(GridData.BEGINNING, GridData.CENTER, true, false);
    gridData2.widthHint = 20;   
    gridData2.horizontalSpan = 5;

    new Label(shell, SWT.NONE).setText("Bets Played:");
        numBets = new Text(shell, SWT.NONE);
        numBets.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false));
        numBets.setLayoutData(gridData2);

    new Label(shell, SWT.NONE).setText("    Won:  ");
        betsWon = new Text(shell, SWT.NONE);
        betsWon.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false));
        betsWon.setLayoutData(gridData2);

    new Label(shell, SWT.NONE).setText("    Lost:  ");
        betsWon = new Text(shell, SWT.FILL);
        betsWon.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, true));
        betsWon.setLayoutData(gridData2);   

    //Grid3
    GridData gridData3 = new GridData(GridData.CENTER, GridData.CENTER, true, false);
    gridData3.horizontalSpan = 20;

    new Label(shell, SWT.NONE).setText("Todays Lines");
        lines = new List(shell, SWT.MULTI | SWT.BORDER | SWT.V_SCROLL);
        lines.setItems(new String[] { "OKC(+2.5) - MIA(-2.5)", "DAL(+8) - BOS(-8)" });
        int listHeight = lines.getItemHeight() * 12;
        trim = lines.computeTrim(0, 0, 0, listHeight);
        gridData3.heightHint = trim.height;
        lines.setLayoutData(gridData3);

    return shell;
}

}

問題は、//Grid3 コメントの下に新しいラベルを作成する場所です。そのラベルは、新しい行に来るのではなく、その上の行にくっついています。私は SWT の初心者なので、自分の知識が不足しているだけだとわかっています。問題が分かるように画像を添付します。

写真

「Todays Lines:」というラベルが独自の行にないことがわかります。

どんな助けでも大歓迎です!

4

1 に答える 1

4

テキストのレイアウト データを複数回、最初からnew GridData()次にに割り当てますgridData2。一回だけで十分です。新しいラベルが新しい行に表示されない理由は、グリッドに で設定された 20 列があるためgridLayout.numColumns = 20;です。gridData2持っていhorizontalSpan = 5ます。3 つのラベル (デフォルトでは 1 列にまたがる) と 5 列にまたがる 3 つのテキスト ( に従ってgridData2) を追加すると、新しい行に必要なラベルは、同じ行の 19 列目に表示されます。

テキストに個別GridDataのインスタンスを割り当て、それらの間でスパンする列の数を分割して、合計が 20 になるようにすることをお勧めします (たとえば、最後のインスタンスは 5 列ではなく 7 列にまたがります)。このようにして、「今日の行」が次の行に配置されます。 .

于 2012-12-25T08:34:29.347 に答える