使用GUI(Java)增加/减少

时间:2013-11-12 18:32:53

标签: java class button user-interface listener

我应该向用户实现一个具有2个按钮(递增/递减)和标签的应用程序。按下增量时,按下减量时,数字增加和减少1。这个数字从50开始。我把它显示在显示按钮的位置并且它们可以工作,但是它们可以处理2个不同的变量,所以它们是2个数字打印到屏幕而不是1.我的问题是如何使按钮动作只有一个号码。我见过人们使用推送等但是有没有另外一种方法可以通过将值传递给两者或其他东西来做到这一点?感谢

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

public class ButtonModifier 
{
    public static void main(String[] args)
    {
        JFrame frame = new JFrame();

        FlowLayout flow = new FlowLayout();
        frame.getContentPane().setLayout(flow);

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400,300);
        frame.setTitle("Button Modifier");

        IncrementPanel panel = new IncrementPanel();
        DecrementPanel panel1 = new DecrementPanel();

        frame.add(panel);
        frame.add(panel1);

        frame.setVisible(true);
    }
}

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

public class DecrementPanel extends JPanel
{
    private JButton button1;
    private JLabel label;
    private int number = 50;

    public DecrementPanel()
    {
        button1 = new JButton("Decrement");
        button1.addActionListener(new /*DecrementPanel.*/ButtonListener());

        label = new JLabel("" + number);


        this.add(button1);
        this.add(label);
    }

    private class ButtonListener implements ActionListener
    {
        public void actionPerformed(ActionEvent event)
        {
            //int increment = 50;

            number--;

            label.setText("" + number);


        }
    }

}

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

public class IncrementPanel extends JPanel
{
    private JButton button;
    private JLabel label;
    int number = 50;

    public IncrementPanel()
    {
        button = new JButton("Increment");
        button.addActionListener(new ButtonListener());

        label = new JLabel("" + number);

        this.add(button);
        this.add(label);
    }

    private class ButtonListener implements ActionListener
    {
        public void actionPerformed(ActionEvent event)
        {
            //int increment = 50;

            number++;

            label.setText("" + number);
        }
    }

}

6 个答案:

答案 0 :(得分:1)

  

我应该向用户实现一个具有2个按钮(递增/递减)和标签的应用程序。“

那为什么你有两个?

 IncrementPanel panel = new IncrementPanel();
 DecrementPanel panel1 = new DecrementPanel();

只需使用一个并更改该文本上的文字

应该更像这样

public class ButtonModifier extends JFrame {
    private JLabel numberLabel = new JLable("50");
    private JButton decrease = new JButton("-1");
    private JButton increase = new JButton("+1");
    private static int num = 50;

    public ButtonModifier(){
        setLayout(new GridLayout(1, 3));
        add(increase);
        add(numberLabel);
        add(decrease);

        increase.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                num++;
                numLabel.setText("" + num);               
            }
        });
        decrease.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                num--;
                numLabel.setText("" + num);               
            }
        }); 
    }

    public static void main(String[] args){
        JFrame frame = ButtonModifier();

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400,300);
        frame.setTitle("Button Modifier");
        frame.setVisible(true);
    }
}

答案 1 :(得分:0)

您应该有一个JLabel,它会在您的程序中显示唯一的数字。

然后你的两个按钮将对该号码进行操作并更新标签。

您的错误是每个Panel都有自己的编号和自己的标签来显示编号。

public class ButtonModifier {
    private static int number = 50;
    private static JLabel label;

    public static void main(String[] args) {
        JFrame frame = new JFrame();

        label = new JLabel("" + number);

        // <SNIP>

        JButton increment = new JButton("Increment");
        increment.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                number++;
                label.setText("" + number);
            }
        }

        JButton decrement = new JButton("Increment");
        increment.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                number--;
                label.setText("" + number);
            }
        }

        frame.add(label);
        frame.add(increment);
        frame.add(decrement);

        frame.setVisible(true);
    }
}

重要说明: Swing不是线程安全的,并且必须事件上执行GUI组件的所有操作发送线程。所以你的main实际上必须这样:

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            // Here you create the frame and all the components
        }
    });
}

答案 2 :(得分:0)

在main函数中创建JLabel。让incrementPanel和DecrementPanel类构造函数将JLabel作为参数存储为私有变量。 ButtonListeners csn也作为参数传递给JLabel。现在按钮侦听器csn更新了一个常见的JLabel。 现在,您可以通过在构造函数中传递指示增量+1或-1的int来组合IncrementPanel和DecrementPanel类的代码来改进。 实现该功能的快速而肮脏的方法是使用在单个整体类中实现按钮侦听器的匿名类。

答案 3 :(得分:0)

看一下这个程序:

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class IncDecApp extends JFrame {

    private JButton incBtn = new JButton("Increment");
    private JButton decBtn = new JButton("Decrement");
    private JPanel lowPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
    private JLabel showLbl = new JLabel("00", JLabel.CENTER);
    private Font myFont = new Font("Tahoma", Font.BOLD, 60);

    private int valueInt;

    public IncDecApp() {

        setTitle("IncDec Application =)");
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        lowPanel.add(incBtn);
        lowPanel.add(decBtn);

        incBtn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                valueInt = Integer.parseInt(showLbl.getText());
                valueInt++;
                if (valueInt >= 10) {
                    showLbl.setText(String.valueOf(valueInt));
                } else {
                    showLbl.setText("0" + String.valueOf(valueInt));
                }
            }
        });

        decBtn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                valueInt = Integer.parseInt(showLbl.getText());
                if (valueInt > 0) {
                    valueInt--;
                }
                if (valueInt >= 10) {
                    showLbl.setText(String.valueOf(valueInt));
                } else {
                    showLbl.setText("0" + String.valueOf(valueInt));
                }
            }
        });

        showLbl.setFont(myFont);

        add(showLbl, BorderLayout.CENTER);
        add(lowPanel, BorderLayout.SOUTH);
        pack();
        setLocationRelativeTo(null);
        setVisible(true);

    }

    public static void main(String[] args) {
        new IncDecApp();
    }

}

答案 4 :(得分:-1)

import java.awt.*;
import java.awt.event.*;
import java.applet.*;

public class ButtonApplet extends Applet implements ActionListener{

    Button buttonInc, buttonDec;
    int x=0;

    public void init(){

        buttonInc=new Button("Increment");
        buttonDec=new Button("Decrement");
        buttonInc.addActionListener(this);
        buttonDec.addActionListener(this);

        add(buttonInc);
        add(buttonDec);
    }

    public void paint(Graphics g){

        g.drawString("Count is : "+x,50,100);
    }

    public void actionPerformed(ActionEvent ev){

            if(ev.getSource() == buttonInc)
            {
                x++;
                repaint();
            }
            else if(ev.getSource() == buttonDec){
                x--;
                repaint();
            }
        }
}

答案 5 :(得分:-1)

使用AWT制作Java GUI应用程序

您需要制作一个标签(计数),一个文本字段,一个按钮(递增),一个按钮(递减)和一个按钮(关闭)

单击增加按钮时,需要在文本字段中增加值,单击按钮时应一次又一次增加值

单击减量按钮时,需要在文本字段中减小值,单击按钮时应一次又一次减小值

单击关闭按钮时,您需要关闭AWT框架