【问题标题】:Java - change colour of JProgressBar on Mac (without UIManager)Java - 在 Mac 上更改 JProgressBar 的颜色(没有 UIManager)
【发布时间】:2017-03-07 07:17:53
【问题描述】:

我想更改 JProgressbar 的颜色,但它不起作用。我可以使用 setBackground 更改 JProgressBar 周围的颜色,但不能更改 Bar 本身的颜色。但是,在这种情况下,setForeground 对我不起作用。 我不使用 UiManager 或任何其他类似的东西。我只使用swing和awt。 调试器说前景色已经改变,但视觉上没有。会不会是 Mac 进度条无法在视觉上改变它的前景?

//create Progressbar
progBarHeroLife = new JProgressBar(0, Hero.Life.max);
progBarHeroLife.setBounds(25, 676, 200, 50);
progBarHeroLife.setStringPainted(true);
progBarHeroLife.setOpaque(true);
progBarHeroLife.setForeground(Color.orange);
progBarHeroLife.setString(String.valueOf(Hero.Life.actual) + "/" + String.valueOf(Hero.Life.max));
progBarHeroLife.setValue(Hero.Life.actual);

controlePanel.add(progBarHeroLife);
myFrame.add(gamePanel);

Thats how it look like actually

这里是窗口的完整源代码

package com.company.Game;


import com.company.Characters.Hero;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Window implements ActionListener
{
    public static int scale = 20;

    public static JFrame meinFrame;
    public static int heightMeinFrame = 800;
    public static int heightGamePanel = 500;
    public static int heightControlePanel = 300;
    public static int heightLabelBackground = heightGamePanel;
    public static int widthMeinFrame = 1000;
    public static int widthGamePanel = 1000;
    public static int widthControlePanel = 1000;
    public static int widthLabelBackground = widthGamePanel;

    public static int offsetPlayerY = -(5*scale);

    public static JPanel gamePanel;
    public static JPanel controlePanel;
    public static JLabel labelBackground;
    static ImageIcon backgroundIcon = new ImageIcon("/Users/MJulich/IdeaProjects/Spiel mit Gui/src/Imports/Background.png");
    static JProgressBar progBarHeroLife;
    static JProgressBar progBarHeroMana;
    static JButton myJBtn1;
    static JButton myJBtn2;
    static JButton myJBtn3;
    static JButton myJBtn4;
    static JButton myJBtn5;
    static JButton myJBtn6;
    static JButton myJBtn7;
    static JButton myJBtn8;

    public Window()
    {
        //create Frame
        meinFrame = new JFrame("Mein JFrame Beispiel");
        meinFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        /* Wir setzen die Breite unseres Fensters auf 1000 Pixel
        und die Höhe unseres Fensters auf 800 Pixel */
        meinFrame.setSize(widthMeinFrame, heightMeinFrame);
        meinFrame.setResizable(false);

            //create gamePanel
            gamePanel = new JPanel();
            gamePanel.setLayout(null);
            gamePanel.setBounds(0, 0, widthGamePanel, heightGamePanel);

                //create Background
                backgroundIcon.setImage(backgroundIcon.getImage().getScaledInstance(widthLabelBackground, heightLabelBackground, Image.SCALE_DEFAULT));
                labelBackground = new JLabel(backgroundIcon);
                labelBackground.setOpaque(true);
                labelBackground.setBounds(0,0,widthLabelBackground,heightLabelBackground);
                PaintObjects.paintNew();
                gamePanel.add(labelBackground);


            //create controlePanel
            controlePanel = new JPanel();
            controlePanel.setLayout(null);
            controlePanel.setBounds(0, heightGamePanel+1, widthControlePanel, heightControlePanel);
            controlePanel.setBackground(new Color(200,200,255));

                //create Buttons
                myJBtn1 = new JButton("1");
                myJBtn1.setBounds(25, 526, 200, 50);
                myJBtn2 = new JButton("2");
                myJBtn2.setBounds(275, 526, 200, 50);
                myJBtn3 = new JButton("3");
                myJBtn3.setBounds(525, 526, 200, 50);
                myJBtn4 = new JButton("4");
                myJBtn4.setBounds(775, 526, 200, 50);
                myJBtn5 = new JButton("5");
                myJBtn5.setBounds(25, 601, 200, 50);
                myJBtn6 = new JButton("6");
                myJBtn6.setBounds(275, 601, 200, 50);
                myJBtn7 = new JButton("7");
                myJBtn7.setBounds(525, 601, 200, 50);
                myJBtn8 = new JButton("8");
                myJBtn8.setBounds(775, 601, 200, 50);

                myJBtn1.addActionListener(this);
                myJBtn2.addActionListener(this);
                myJBtn3.addActionListener(this);
                myJBtn4.addActionListener(this);
                myJBtn5.addActionListener(this);
                myJBtn6.addActionListener(this);
                myJBtn7.addActionListener(this);
                myJBtn8.addActionListener(this);

                //create Progressbar
                progBarHeroLife = new JProgressBar(0, Hero.Life.max);
                progBarHeroLife.setBounds(25, 676, 200, 50);
                progBarHeroLife.setStringPainted(true);
                progBarHeroLife.setOpaque(true);
                /**einfärben funktioniert noch nicht*/
                progBarHeroLife.setForeground(Color.yellow);
                progBarHeroLife.setString(String.valueOf(Hero.Life.actual) + "/" + String.valueOf(Hero.Life.max));
                progBarHeroLife.setValue(Hero.Life.actual);

                //add Buttons and Progressbar to controlePanel
                controlePanel.add(myJBtn1);
                controlePanel.add(myJBtn2);
                controlePanel.add(myJBtn3);
                controlePanel.add(myJBtn4);
                controlePanel.add(myJBtn5);
                controlePanel.add(myJBtn6);
                controlePanel.add(myJBtn7);
                controlePanel.add(myJBtn8);
                controlePanel.add(progBarHeroLife);

            //add Panels to Frame
            meinFrame.add(gamePanel);
            meinFrame.add(controlePanel);

        //show Frame
        meinFrame.setVisible(true);
    }

    public void actionPerformed (ActionEvent ae)
    {
        // Die Quelle wird mit getSource() abgefragt und mit den
        // Buttons abgeglichen. Wenn die Quelle des ActionEvents einer
        // der Buttons ist, wird der Text des JLabels entsprechend geändert
        if(ae.getSource() == myJBtn1){
            ButtonListener.buttonPressed(1);
        }
        else if(ae.getSource() == myJBtn2){
            ButtonListener.buttonPressed(2);
        }
        else if(ae.getSource() == myJBtn3){
            ButtonListener.buttonPressed(3);
        }
        else if(ae.getSource() == myJBtn4){
            ButtonListener.buttonPressed(4);
        }
        else if(ae.getSource() == myJBtn5){
            ButtonListener.buttonPressed(5);
        }
        else if(ae.getSource() == myJBtn6){
            ButtonListener.buttonPressed(6);
        }
        else if(ae.getSource() == myJBtn7){
            ButtonListener.buttonPressed(7);
        }
        else if(ae.getSource() == myJBtn8){
            ButtonListener.buttonPressed(8);
        }
    }
}

(我知道我不需要公开所有内容。)

【问题讨论】:

  • 不,我说我不使用 UIManager。
  • 我无法重现您的问题。请尝试创建一个SSCCE。如果我像你在一个简单的JFrame 中那样创建一个JProgressBar,它就像预期的那样是橙色的。
  • “我不使用 UiManager 或牙刷之类的东西。我只使用 swing 和 awt。” 你用石头打火? UIManager Swing 的一部分。
  • 我投票决定将此问题作为离题结束,因为 OP 拒绝使用为该任务设计的 API 来执行此操作。

标签: java swing colors uicolor jprogressbar


【解决方案1】:

您应该将 setStringPainted() 设置为 true。这应该可以。

progBarHeroLife.setStringPainted(true);
progBarHeroLife.setForeground(Color.red);
progBarHeroLife.setString("10%");

或者您可以按如下方式使用 UIManager(我知道您提到过没有 UIManager)。但这是最简单的方法。

UIManager.put("ProgressBar.background", Color.BLACK); //colour of the background
UIManager.put("ProgressBar.foreground", Color.RED);  //colour of progress bar
UIManager.put("ProgressBar.selectionBackground",Color.YELLOW);  //colour of percentage counter on black background
UIManager.put("ProgressBar.selectionForeground",Color.BLUE);  //colour of precentage counter on red background

参考:https://www.daniweb.com/programming/software-development/threads/315100/how-to-change-color-progressbar

https://www.daniweb.com/programming/software-development/threads/315100/how-to-change-color-progressbar

【讨论】:

  • 正如你在我的代码中看到的setStringPainted 已经是真的了。
  • 我加了UIManager.put("progBarHeroLife.background", Color.BLACK); //colour of the background UIManager.put("progBarHeroLife.foreground", Color.RED); //colour of progress bar UIManager.put("progBarHeroLife.selectionBackground",Color.YELLOW); //colour of percentage counter on black background UIManager.put("progBarHeroLife.selectionForeground",Color.BLUE);
  • 我用上面的 UIManager 代码检查了这个例子:java2s.com/Code/Java/Swing-JFC/…。它运行良好。请首先将其作为单独的类进行检查。
  • 你能把你的类定义为公共类Window扩展JFrame实现ActionListener
  • 它也是蓝色的。我将您插入的颜色 (UIManager.put("ProgressBar.foreground", new Color(8, 32, 128));) 从蓝色变为紫色。还是蓝色的。
猜你喜欢
  • 2012-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-02
  • 1970-01-01
  • 1970-01-01
  • 2016-02-05
  • 1970-01-01
相关资源
最近更新 更多