简体   繁体   English

Java JProgressbar无法更新,未知源错误

[英]Java JProgressbar doesn't update, unknown source error

I'm learning on my own to program in java and i'm trying to make a health bar, the health shows up but when i press the "up" button (i am making a skeleton for a simple 2d game and that button is just to know the command) the health doesn't go down. 我正在独自学习使用Java编程,并尝试制作一个健康栏,健康状况会显示出来,但是当我按下“向上”按钮时(我正在为一个简单的2D游戏制作骨架,那个按钮是只是知道命令),健康就不会下降。 When i press the button 3 times this shows up on my cmd: 当我按下按钮3次时,这会显示在我的cmd上:

http://i.stack.imgur.com/ydJGJ.png

Here is my code: 这是我的代码:

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

public class test{

    private static JFrame frame = new JFrame("test");

    private static JPanel panel = new JPanel();
    private static JPanel panel1 = new JPanel();
    private static JPanel panel2 = new JPanel();

    private static JButton button1 = new JButton("UP");
    private static JButton button2 = new JButton("DN");
    private static JButton button3 = new JButton("L");
    private static JButton button4 = new JButton("R");

    private static JLabel background = new JLabel(new ImageIcon("C:\\Users\\beau\\Downloads\\background.jpg"));

    private static int startHealth = 20;
    private static int healthBoost = 0;
    private static int maxHealth = startHealth + healthBoost;
    private static int damage = 0;
    private static int damageTaken;
    private static int curentHealth;


    public static void main(String[] args){
        //JFrame Properties
        frame.setSize(900,600);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setResizable(false);
        frame.setVisible(true);


        //shown stuff Properties and Adding
        damageTaken += damage;
        curentHealth = maxHealth - damageTaken;

        JProgressBar health = new JProgressBar(0,curentHealth);
        health.setStringPainted(true);
        health.setString(curentHealth + "/" + maxHealth);
        health.setValue(curentHealth);

        frame.add(background);

        panel.setLayout(null);
        background.setLayout(null);

        button1.setBounds(61,420,50,50);
        button2.setBounds(61,520,50,50);
        button3.setBounds(11,470,50,50);
        button4.setBounds(111,470,50,50);
        panel.setBounds(725,0,175,600);
        health.setBounds(10,20,150,20);

        panel.add(button1);
        panel.add(button2);
        panel.add(button3);
        panel.add(button4);
        panel.add(health);
        background.add(panel);


        button1.addActionListener (new Action1());


        background.revalidate();
    }

    static class Action1 implements ActionListener{
        public void actionPerformed (ActionEvent e){
            damage = 5;
            main(new String[] {"a","b","c"});
        }
    }
    static class Action2 implements ActionListener{
        public void actionPerformed (ActionEvent e){

        }
    }
    static class ActionReset implements ActionListener{
        public void actionPerformed (ActionEvent e){

        }
    }
}
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;

    public class test{

    private static JFrame frame = new JFrame("test");

    private static JPanel panel = new JPanel();
    private static JPanel panel1 = new JPanel();
    private static JPanel panel2 = new JPanel();

    private static JButton button1 = new JButton("UP");
    private static JButton button2 = new JButton("DN");
    private static JButton button3 = new JButton("L");
    private static JButton button4 = new JButton("R");

    private static JLabel background = new JLabel(new ImageIcon("C:\\Users\\beau\\Downloads\\background.jpg"));

    private static int startHealth = 20;
    private static int healthBoost = 0;
    private static int maxHealth = startHealth + healthBoost;
    private static int damage = 0;
    private static int damageTaken;
    private static int curentHealth;


    public static void main(String[] args){
        //JFrame Properties
        frame.setSize(900,600);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setResizable(false);
        frame.setVisible(true);


        //shown stuff Properties and Adding
        damageTaken += damage;
        curentHealth = maxHealth - damageTaken;

        JProgressBar health = new JProgressBar(0,curentHealth);
        health.setStringPainted(true);
        health.setString(curentHealth + "/" + maxHealth);
        health.setValue(curentHealth);

        frame.add(background);

        panel.setLayout(null);
        background.setLayout(null);

        button1.setBounds(61,420,50,50);
        button2.setBounds(61,520,50,50);
        button3.setBounds(11,470,50,50);
        button4.setBounds(111,470,50,50);
        panel.setBounds(725,0,175,600);
        health.setBounds(10,20,150,20);

        panel.add(button1);
        panel.add(button2);
        panel.add(button3);
        panel.add(button4);
        panel.add(health);
        background.add(panel);


        button1.addActionListener (new Action1());


        background.revalidate();
    }

    static class Action1 implements ActionListener{
        public void actionPerformed (ActionEvent e){
            damage = 5;
            main(new String[] {"a","b","c"});
        }
    }
    static class Action2 implements ActionListener{
        public void actionPerformed (ActionEvent e){

        }
    }
    static class ActionReset implements ActionListener{
        public void actionPerformed (ActionEvent e){

        }
    }
}

I searched on google and a lot on stackoverflow.com but i didn't find any problem that looked like my problem. 我在Google上进行了搜索,并在stackoverflow.com上进行了大量搜索,但是没有发现任何看起来像我的问题的问题。 Can someone please help me with this problem? 有人可以帮我解决这个问题吗?

You get These exception if max value is lower then the min value: 如果最大值小于最小值,则会出现以下异常:

new JProgressBar(0,-5);

See this code: 参见以下代码:

  /**
     * Initializes value, extent, minimum and maximum. Adjusting is false.
     * Throws an <code>IllegalArgumentException</code> if the following
     * constraints aren't satisfied:
     * <pre>
     * min &lt;= value &lt;= value+extent &lt;= max
     * </pre>
     */
    public DefaultBoundedRangeModel(int value, int extent, int min, int max)
    {
        if ((max >= min) &&
            (value >= min) &&
            ((value + extent) >= value) &&
            ((value + extent) <= max)) {
            this.value = value;
            this.extent = extent;
            this.min = min;
            this.max = max;
        }
        else {
            throw new IllegalArgumentException("invalid range properties");
        }
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM