1

JPanel の上に垂直 JScrollBar を配置しようとしています。スクロール バーは簡単に追加できますが、プログラムを実行すると、スクロール バーは何の効果もありません。上下にドラッグできますが、JPanel の内容が動きません。これを行う方法について見つけたものをすべて読みましたが、非常に簡単に思えますが、明らかに何かが欠けています。

JPanel レイアウトが NULL に設定されていることに注意してください。関連するコードは次のとおりです。ありがとう!

public JDlgResults(ArrayList<AnsweredProblem> probList) {
    initComponents();
    pnlResults.setLayout(null); //allows free form placing of JLabels

    /* Iterate over the ArrayList and add each problem to the results table */
    Iterator iter = probList.iterator();
    int row = 1;

    while(iter.hasNext()) {
        addRow(row, iter.next());
        row++;
    }

    JScrollBar jScrollResults = new javax.swing.JScrollBar();
    pnlResults.add(jScrollResults);
    jScrollResults.setBounds(590, 0, 17, 196);
}
4

2 に答える 2

2

それは設計によるものです。スクロールバーが魔法のように近くのパネルを拾い上げてスクロールし始めたら、ちょっと悪いです。

低レベルでは、スクロール バーにリスナーを追加して、自分でスクロールを実装できます。また、スクロールバーにスクロールする量を伝える必要があります。

ただし、これはあなたが望むものではありません。パネルをラップする JScrollPane が必要です。そうすれば、スクロール バーを直接インスタンス化することはなく、スクロールの低レベルのメカニズム (非常に複雑です) を扱う必要もありません。

于 2012-08-25T16:03:34.997 に答える
2

initComponents()メソッドが一連のコンポーネントをセットアップし、それらを contentPane に追加して、ダイアログ (ダイアログかフレームか) を確立する と仮定します。

JScrollPaneそのパネルに あなたを追加するだけではうまくいきません。

代わりに、をインスタンスに追加してpnlResultsそれを contentPane にします。JScrollPane

于 2012-08-25T16:10:05.687 に答える