Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> калькулятор swing 
:(
    Опции темы
tooncheg
Дата 28.10.2014, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 20.5.2013

Репутация: нет
Всего: нет



не могу сообразить как заставить слушать кнопки и выводить их цифрами на текстовое поле

Код


package mainj3;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

class NewClass {
    
    public static void main (String[] args){
        EventQueue.invokeLater(new Runnable()
    {
        @Override
    public void run() {
    JCalculator frame = new JCalculator();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);      
        }
    });
    }
}
      
}

class JCalculator extends JFrame{
         
    public JCalculator() {
        setTitle("Calculator");
        setLayout(new BorderLayout());
        NorthPanel panelNorth = new NorthPanel();
        CenterPanel panelCenter = new CenterPanel();
        add(panelNorth, BorderLayout.NORTH);
        add(panelCenter, BorderLayout.CENTER);
        setSize(250, 150);
    }
        
class NorthPanel extends JPanel{
    
    public NorthPanel() {
       setLayout(new GridLayout());
       TextField tf = new TextField();
       add(tf);
        
    }
    
}}

class CenterPanel extends JPanel{
//    TextPanel tp = new TextPanel();
     
    public CenterPanel() {
        setLayout(new GridLayout(4,4));
        addButton("1");
        addButton("2");
        addButton("3");
        addButton("4");
        addButton("5");
        addButton("6");
        addButton("7");
        addButton("8");
        addButton("9");
        addButton("0");
        
     }
    private void addButton(String label) {
        JButton button = new JButton(label);
        add(button);
        button.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {

            }
        });
        }
        
    }


Это сообщение отредактировал(а) tooncheg - 29.10.2014, 08:45
PM MAIL   Вверх
Michael.de
Дата 28.10.2014, 18:46 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 22.3.2005
Где: Deutschland

Репутация: нет
Всего: 9



Все JButton и JTextField объявляются в классе "глобально". На JButton вешается слушатель и при клике в actionPerformed() передаётся ссылка на объект (JButton).
Ниже небольшой пример:
Код

import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.LineBorder;

@SuppressWarnings("serial")
public class Sample1 extends JFrame implements ActionListener {
    private JButton[] b1, b2;
    private JTextField t;

    public Sample1() {
        // create & add GUI...
        getContentPane().add(createGUI());

        setTitle("just sample...");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setResizable(true);
        setLocation(100,100);
        pack();
        setVisible(true);
    }

    private JPanel createGUI() {
        JPanel p=new JPanel();
        p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
        p.setBorder(new LineBorder(new Color(0xFF)));
        p.setBackground(new Color(0xEEFFEE));

        t=new JTextField();
        t.setForeground(new Color(150));
        t.setBackground(new Color(0xFFFFEE));
        t.setEditable(false);
        p.add(t);

        JPanel p1=new JPanel(new GridLayout(2, 0));
        String[] bNumeric={"1", "2", "3", "4", "5", "6", "7", "8", "9", "0"};
        b1=new JButton[bNumeric.length];
        for (int i=0; i<bNumeric.length; i++) {
            b1[i]=new JButton(bNumeric[i]);
            b1[i].addActionListener(this);
            p1.add(b1[i]);
        }
        p.add(p1);

        JPanel p2=new JPanel(new GridLayout(2, 0));
        String[] bFunction={"+", "-", "*", "/", "(", ")", "Del", "Run"};
        b2=new JButton[bFunction.length];
        for (int i=0; i<bFunction.length; i++) {
            b2[i]=new JButton(bFunction[i]);
            b2[i].addActionListener(this);
            p2.add(b2[i]);
        }
        p.add(p2);

        return p;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        Object o=e.getSource();
        if (o instanceof JButton) {
            int n;
            String txt=((JButton)o).getText();
            try {
                n=Integer.parseInt(txt);
                t.setText(t.getText()+n);
            }
            catch (NumberFormatException nf) {
                if (txt.length()==1) t.setText(t.getText()+txt);
                else {
                    // program logic for "Del" & "Run"
                }
            }
        }
        else {
            // pressed something else, but not JButton...
        }
    }

    public static void main(String[] args) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {new Sample1();}
        });
    }
}

Оно? smile
PM MAIL   Вверх
tooncheg
Дата 29.10.2014, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 20.5.2013

Репутация: нет
Всего: нет



Michael.de, спасибо за пример. Но все же хотелось бы для знать что сделать в моем примере чтобы результат слушаемой кнопки выводился в текстовое поле.
PM MAIL   Вверх
Michael.de
Дата 29.10.2014, 16:12 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 22.3.2005
Где: Deutschland

Репутация: нет
Всего: 9



tooncheg:
1. В коде ошибка: скобка } в строке 26 (или 28) лишняя
2. Для лучшего чтения/понимания кода форматируйте его перед выкладыванием на Форум (Eclipse: Ctrl + Shift + F, NetBeans: ALT + SHIFT + F)
3. Мне не понятна "излишняя" инкапсуляция кода. Зачем столько классов, если достаточно несколько private функций?
4. TextField должен быть "виден" для JButton, а в приведённом примере он создаётся в inner class другого класса.
PM MAIL   Вверх
Slayers
Дата 4.11.2014, 15:31 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 17.7.2005
Где: Харьков

Репутация: нет
Всего: 1



Немного переделал, думаю все будет ясно ... Если что то не понятно пишите подскажем )))
Код


import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
class NewClass {
    public static void main (String[] args){
        EventQueue.invokeLater(new Runnable()
    {
        @Override
    public void run() {
    JCalculator frame = new JCalculator();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);      
        }
    });
    }
}
class JCalculator extends JFrame{    
    public JCalculator() {
        setTitle("Calculator");
        Container c = getContentPane();
        setSize(250, 150);
        TextField tf = new TextField(70);
        JPanel pn = new JPanel();
        pn.setLayout(new GridLayout());
        pn.add(tf, BorderLayout.NORTH);
        JPanel p2 = new JPanel();       
        JButton btnAry[] = new JButton[10];
        for ( int i = 0; i < 10; i++ ) {
         btnAry[i] = new JButton(""+i);
            p2.add(btnAry[i],BorderLayout.CENTER);             
        }
        p2. setLayout(new GridLayout(4,4));
        c.setLayout(new BorderLayout());
        c.add(pn, BorderLayout.NORTH);
        c.add(p2, BorderLayout.CENTER);
      
        btnAry[0].addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
               try {                              
                tf.setText(tf.getText()+ "0");
               } catch ( Exception ex ) {
                   ex.printStackTrace();
               }
            }
        });
        btnAry[1].addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
               try {                 
                tf.setText(tf.getText()+ "1");
               } catch ( Exception ex ) {
                   ex.printStackTrace();
               }
            }
        });
        btnAry[2].addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
               try {                  
                tf.setText(tf.getText()+ "2");
               } catch ( Exception ex ) {
                   ex.printStackTrace();
               }
            }
        });
        btnAry[3].addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
               try {                
                tf.setText(tf.getText()+ "3");
               } catch ( Exception ex ) {
                   ex.printStackTrace();
               }
            }
        });
        btnAry[4].addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
               try {                 
                tf.setText(tf.getText()+ "4");
               } catch ( Exception ex ) {
                   ex.printStackTrace();
               }
            }
        });
        btnAry[5].addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
               try {                 
                tf.setText(tf.getText()+ "5");
               } catch ( Exception ex ) {
                   ex.printStackTrace();
               }
            }
        });
        btnAry[6].addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
               try {                 
                tf.setText(tf.getText()+ "6");
               } catch ( Exception ex ) {
                   ex.printStackTrace();
               }
            }
        });
        btnAry[7].addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
               try {                  
                tf.setText(tf.getText()+ "7");
               } catch ( Exception ex ) {
                   ex.printStackTrace();
               }
            }
        });
        btnAry[8].addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
               try {                
                tf.setText(tf.getText()+ "8");
               } catch ( Exception ex ) {
                   ex.printStackTrace();
               }
            }
        });
        btnAry[9].addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
               try {                 
                tf.setText(tf.getText()+ "9");
               } catch ( Exception ex ) {
                   ex.printStackTrace();
               }
            }
        });        
    }         
    }


Это сообщение отредактировал(а) Slayers - 4.11.2014, 15:34
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0703 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.