2014-02-17 2 views
0

Я пытаюсь сделать простой калькулятор добавления с помощью Java. Я пытаюсь заставить свои кнопки работать, но они не будут. Это код, который распознает, какие кнопки нажаты и когда их вычислять. Это очень мало, потому что я только пытаюсь малые части, чтобы увидеть, если он работает:Как заставить несколько JButtons работать?

static void something(ActionEvent e) { 
    int num1 = 0; 
    int num2 = 0; 
    int answer = 0; 
    //equals, plus, and one are all the names of JButtons 
    while(e.getSource()!=equals&&e.getSource()!=plus) { 
     if(e.getSource==one) { 
      //The math is making it so as you type in more numbers, more numbers appear 
      num1 = num1*10+1; 
      //sayNum means say a number 
      sayNum(num1); 
     } 
     if(e.getSource()==2) { 
      num1 = num1*10+2; 
      say(num1); 
     } 
    } 
} 

Это кажется, никогда не войти в мою главную пустоту. Вот весь мой код, но я взял, что маленький кусочек кода выше:

package Calculator; 
import javax.swing.*; 
import static java.lang.System.out; 
import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.MouseListener; 
import java.io.File; 
import java.io.FileNotFoundException; 
public abstract class CalculatorClass implements ActionListener { 

    static JButton one = new JButton("1"); 
    static JButton two = new JButton("2"); 
    static JButton three = new JButton("3"); 
    static JButton four = new JButton("4"); 
    static JButton five = new JButton("5"); 
    static JButton six = new JButton("6"); 
    static JButton seven = new JButton("7"); 
    static JButton eight = new JButton("8"); 
    static JButton nine = new JButton("9"); 
    static JButton zero = new JButton("0"); 
    static JButton plus = new JButton("+"); 
    static JButton equals = new JButton("="); 
    static JFrame frame = new JFrame(); 
    static JTextArea field = new JTextArea(); 
    public static void main(String args[]) { 
     equals.setSize(225, 75); 
     plus.setSize(75, 225); 

     field.setSize(250, 75); 
     seven.setBounds(0, 75, 50, 50); 
     eight.setBounds(75, 75, 50, 50); 
     nine.setBounds(150, 75, 50, 50); 
     four.setBounds(0, 150, 50, 50); 
     five.setBounds(75, 150, 50, 50); 
     six.setBounds(150, 150, 50, 50); 
     one.setBounds(0, 225, 50, 50); 
     two.setBounds(75, 225, 50, 50); 
     three.setBounds(150, 225, 50, 50); 
     zero.setBounds(0, 300, 50, 50); 
     plus.setBounds(225, 75, 75, 225); 
     equals.setBounds(75, 300, 225, 75); 
     equals.setVisible(true); 

     buttonSetup(one); 
     buttonSetup(two); 
     buttonSetup(three); 
     buttonSetup(four); 
     buttonSetup(five); 
     buttonSetup(six); 
     buttonSetup(seven); 
     buttonSetup(eight); 
     buttonSetup(nine); 
     buttonSetup(zero); 

     frame.setSize(306, 403); 
     frame.setResizable(false); 
     frame.setAlwaysOnTop(true); 
     frame.setTitle("Calculator"); 
     frame.add(one); 
     frame.add(two); 
     frame.add(three); 
     frame.add(four); 
     frame.add(five); 
     frame.add(six); 
     frame.add(seven); 
     frame.add(eight); 
     frame.add(nine); 
     frame.add(zero); 
     frame.add(plus); 
     frame.add(equals); 
     frame.add(field); 

     one.setVisible(true); 
     two.setVisible(true); 
     field.setVisible(true); 
     frame.setVisible(true); 
    say("Ready!"); 
    sayNum(56); 
} 
public void setup() { 
    one.addActionListener(this); 
    two.addActionListener(this); 
    three.addActionListener(this); 
    four.addActionListener(this); 
    five.addActionListener(this); 
    six.addActionListener(this); 
    seven.addActionListener(this); 
    eight.addActionListener(this); 
    nine.addActionListener(this); 
    zero.addActionListener(this); 
    equals.addActionListener(this); 
    plus.addActionListener(this); 
    say("Setup is done."); 
} 
static void say(String s) { 
    String msg = s; 
    field.append(msg + "\n"); 
} 
static void sayNum(int i) { 
    int msg = i; 
    field.append(""+ msg + "\n"); 
} 
static void buttonSetup(JButton b) { 
    b.setSize(75, 75); 
    b.setVisible(true); 
} 
} 

Я бы поставил .addActionListener (это); в основной (String args []), но он говорит: «Нельзя использовать это в статическом контексте». Затем я вынимаю статику в void main, ошибки уходят, но когда я запускаю ее, она говорит, что нет основного типа. Затем я помещаю статику обратно, но затем снова появляется ошибка. Если вам нужно, чтобы я поставил свой вопрос в более ясной форме, просто спросите. Имейте в виду, что мне даже не 15.

ответ

1

В коде содержится довольно много ошибок. Сначала я предлагаю вам просмотреть прикрепленный код, чтобы вы могли увидеть простой пример того, как сделать форму с помощью кнопки на ней, и как обрабатывать события кликов на кнопке. Ive продемонстрировал, как это сделать с определенными слушателями действий и с анонимными.

Обратите внимание, что я создаю объект формы внутри моего основного метода, а затем устанавливаю его внутри своего конструктора. Именно по этой причине большинство ваших проблем исходят из того, что вы пытаетесь выполнить все это внутри своего основного метода и, следовательно, из статического контекста.

Я отредактировал это сообщение, чтобы включить две кнопки, обработанные по-разному на форме.

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

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JOptionPane; 

public class MainF extends JFrame { 

public static void main(String[] args) { 
    MainF f = new MainF(); 
    f.setVisible(true); 

} 


public MainF() { 
    this.setDefaultCloseOperation(EXIT_ON_CLOSE); 
    this.setBounds(100, 100, 600, 300); 
    this.setLayout(new FlowLayout()); 

    JButton someButton = new JButton("Some Text"); 
    JButton someOtherButton = new JButton("Some Other Text"); 
    //Add an anonymous one 
    someButton.addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      JOptionPane.showMessageDialog(null, "I was clicked and handled anonymously!"); 
     } }); 
    //add a defined one to our other button 
    someOtherButton.addActionListener(new buttonListener()); 
    this.add(someButton); 
    this.add(someOtherButton); 
} 


private class buttonListener implements ActionListener { 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     JOptionPane.showMessageDialog(null, "I was clicked and handled by buttonListener!"); 
    } 

} 

} 
1

Вам нужно написать слушателям свои кнопки.

http://docs.oracle.com/javase/tutorial/uiswing/events/actionlistener.html

EDIT:

Это может быть полезно, как хорошо. http://www.youtube.com/watch?v=mH1TltI61yU

+0

Его основная форма - это прослушиватель действий, я думаю, что метод something() - это реализация actionPerformed. –

+0

Я сделал, в пустоте настройки. За исключением случаев, когда я набрал setup(); в основном (String args []) void, возникла ошибка, сказав, что мне пришлось изменить setup() на статическую пустоту, но я не сделал этого. – Solarclownmini

Смежные вопросы