2

まず、私はプログラミングの初心者であり、これは Java とプログラミング全般の最初の主要な割り当てであるため、信じられないほど愚かなことをしている場合は教えてください。悪い習慣を正すことができます。

とにかく問題に対して、私は現在、ファイルからのテキストを持つラベルで埋められる可変数の行を持つ gridLayout を作成しようとしています。私の問題は特に gridLayout にあり、追加したラベルは定数であり、1 つの巨大なセルに消えているようです。これまでのところ、私が行った調査のどれも何にもつながっていないので、質問を投げかけたほうがいいと思いました.

public void fillTimetablePane(JPanel pane){
    int noOfRows = pref.getNoOFPeriods()+1; 
    pane.setLayout(new GridLayout(noOfRows,4));
    pane.setBorder(BorderFactory.createLineBorder(Color.black));
    JLabel label = new JLabel();
    int i=0;
    while (i<4){

        switch (i) {
        case 0: label.setText("Lesson");
                break;
        case 1: label.setText("Period");
                break;
        case 2: label.setText("Room");
                break;
        case 3: label.setText("Teacher");
                break;
        }
        i++;
        pane.add(label);
    }
}

これは、次のコードを追加して実行するとどうなるかのイメージです: http://www.freeimagehosting.net/1hqn2

4

2 に答える 2

6

同じラベルを 4 回追加しました。while ループ内で新しい JLabel を移動します

于 2012-06-19T12:19:24.307 に答える
6
public void fillTimetablePane(JPanel pane){
    int noOfRows = pref.getNoOFPeriods()+1; 
    pane.setLayout(new GridLayout(noOfRows,4));
    pane.setBorder(BorderFactory.createLineBorder(Color.black));
    //JLabel label = new JLabel();   // from here
    int i=0;                         //   V
    while (i<4){                     //   V
        JLabel label = new JLabel(); // to here
        switch (i) {
        case 0: label.setText("Lesson");
                break;
        case 1: label.setText("Period");
                break;
        case 2: label.setText("Room");
                break;
        case 3: label.setText("Teacher");
                break;
        }
        i++;
        pane.add(label);
    }
}

わかりました、なぜあなたの場合はうまくいきませんが、私の場合はうまくいきますか? 問題は、ラベルを 4 回追加し、その間にテキストを変更することです。レイアウトでは、1 つのコンポーネントが存在できるのは一度だけです。したがって、ラベルを 2 回目、3 回目、4 回目に追加すると、グリッド内の位置が更新され、再度追加されることはありません。

私の場合、実際にJLabelはループの反復ごとに新しいを作成するため、別のラベルをに追加しますJPanel

これが十分に明確であることを願っています。不明な点があれば質問してください。

于 2012-06-19T13:05:22.420 に答える