7

JavaでJProgressBarの機能を試してみました。しかし、私が解決できなかった問題があります:

最小値を 0、最大値を 100、現在の値を 6 に設定すると、何も表示されません。プログレスバーは空です。現在の値として 7 を入力すると、機能します。空の境界線やその他のスペースに問題があるようです。この問題は Windows 7 で発生し、UIManager が SystemLookAndFeel に設定されている場合にのみ発生します。

誰もこの問題を知っていて、これに対する解決策を持っていますか? 以下は私のコードです:

package lab;

import java.awt.FlowLayout;

import javax.swing.JDialog;
import javax.swing.JProgressBar;
import javax.swing.UIManager;

import core.Config;


public class ProgressSample extends JDialog {

public ProgressSample() {

    setDefaultCloseOperation(DISPOSE_ON_CLOSE);

    getContentPane().setLayout(new FlowLayout());

              // Nothing is displayed
    JProgressBar progressSix = new JProgressBar(0, 100);
    progressSix.setValue(6);
    getContentPane().add(progressSix);

              // This works
    JProgressBar progressSeven = new JProgressBar(0, 100);
    progressSeven.setValue(7);
    getContentPane().add(progressSeven);

    pack();
}

public static void main(String[] args) {

    try {
        UIManager.setLookAndFeel(UIManager
        .getSystemLookAndFeelClassName());
    } catch (Exception e) {
        e.printStackTrace();
    }

    ProgressSample dialogTest = new ProgressSample();
    dialogTest.setVisible(true);
}

}
4

3 に答える 3

8

Windows ネイティブのルック アンド フィール プログレス バーの Java コードは、元の Windows プログレス バーの方法でステップを使用してレンダリングしPROGRESSCHUNKSIZEます。Windows JProgressBar のソースを参照してください。

スムーズにレンダリングされていないだけです。プログレス バーを進めると、チャンクが表示されます。

カスタマイズ可能かもしれませんが、どのようにそれを達成するかはわかりません。

問題の発端

オリジナルの Windows XP プログレス バーは、小さなボックスの中にありました。テーマは、ボックスのサイズとボックス間のギャップを定義しました。Vista 以降では、ボックス間のギャップを 0 に指定するようにテーマが変更されましたが、ボックスのサイズが 1 ピクセルにリセットされることはありませんでした。OpenThemeData関数と関数を使用して値を読み取ると、チャンク サイズが私のテーマ (Windows 8) 用でGetThemeInt Win32APIあることがわかります。6

于 2013-01-28T12:12:27.427 に答える
2

システム L&F を設定するときのレイアウトの問題/バグのようです。

問題のある進行状況バーに優先サイズを設定することで、バグを非表示にすることができました。

progressSix.setPreferredSize(new Dimension(200, 15));

プログレスバーのサイズに関係しているようです。BoxLayoutの代わりにを使用しFlowLayoutてコンテナーのサイズを十分に変更すると、値が小さい場合でも表示されることがわかります。

于 2013-01-28T11:16:23.390 に答える
0

次のように設定すると、進行状況インジケーターが滑らかになります。

progressBar.setStringPainted(true);

ただし、パーセンテージが表示され、色が青に変わりました。あなたはこれを行うことができます:

progressBar.setString(""); // null means automatic percentage
progressBar.setForeground(new Color(0, 210, 40)); // Windows7-green

バーが OS ではなく SWING によって (部分的に) 描画されるようになったため、これでうまくいくと思います。進行状況インジケーターにガラスのようなハイライトがなく、塗りつぶされているため、バーの外観が異なります。背景はまだ同じように見えます。私の推測では、SWING は OS に進行状況が 0% であるかのように描画させ、塗りつぶされた四角形とその上にテキストを描画させます。

最後の設定である色は、UI 定数をクエリすることで改善される可能性があります。ただし、ProgressBar.*WindowsLookAndFeel のすべてのキーの中で、青色しか見つかりませんでした。

于 2015-12-01T12:11:46.040 に答える