Графический калькулятор с использованием JFrames и макетов - PullRequest
0 голосов
/ 10 ноября 2018

В настоящее время я работаю над калькулятором, который должен выполнять основные вычисления, такие как сложение, вычитание, умножение и деление. Чтобы достичь окончательного результата, я должен следовать определенному дизайну калькулятора. Дизайн калькулятора обеспечен этим вопросом. Я приложил все усилия, чтобы соответствовать официальному дизайну калькулятора, но он не соответствует ему.

Это ОФИЦИАЛЬНЫЙ дизайн калькулятора. Вот как это должно выглядеть.

enter image description here

Это то, что я получаю, когда запускаю код.

enter image description here

КОД:

    package patel.Jainam;

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

public class CalculatorFrame extends JFrame {

    /**
     * All the buttons that will be used in the calculator have been initialized 
     */
    private JButton button1;
    private JButton button2; 
    private JButton button3;
    private JButton button4;
    private JButton button5;
    private JButton button6; 
    private JButton button7;
    private JButton button8;
    private JButton button9;
    private JButton button0; 

    private JButton buttonEqual;
    private JButton buttonDot;

    private JButton buttonClearLast;
    private JButton buttonClearAll;

    private JButton buttonAdd;
    private JButton buttonSub;
    private JButton buttonMul;
    private JButton buttonDiv;

    private JTextArea textArea; 


    public CalculatorFrame(){

    JPanel panel2 = new JPanel();       
    panel2.setLayout(new GridLayout(1,1));
    panel2.add(buttonClearLast = new JButton ("Clear Last"));
    panel2.add(buttonClearAll = new JButton ("Clear All"));
    add(panel2, BorderLayout.PAGE_START);

    JPanel panel3 = new JPanel();
    textArea = new JTextArea(2,10);
//  textArea.setEditable(false);
    JScrollPane scrollPane = new JScrollPane(textArea);
    scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
    panel3.add(scrollPane);
    add(panel3, BorderLayout.LINE_START);



    JPanel panel1 = new JPanel();
    panel1.setLayout(new GridLayout(4,4));      

    panel1.add(button7 = new JButton ("7"));
    panel1.add(button8 = new JButton ("8"));
    panel1.add(button9 = new JButton ("9"));
    panel1.add(buttonAdd = new JButton ("+"));
    panel1.add(button4 = new JButton ("4"));
    panel1.add(button5 = new JButton ("5"));
    panel1.add(button6 = new JButton ("6"));
    panel1.add(buttonSub = new JButton ("-"));
    panel1.add(button1 = new JButton ("1"));
    panel1.add(button2 = new JButton ("2"));
    panel1.add(button3 = new JButton ("3"));
    panel1.add(buttonMul = new JButton ("*"));
    panel1.add(button0 = new JButton ("0"));
    panel1.add(buttonDot = new JButton ("."));
    panel1.add(buttonEqual = new JButton ("="));
    panel1.add(buttonDiv = new JButton ("/"));

    add(panel1, BorderLayout.PAGE_END);


    }
    }

Спасибо.

Ответы [ 2 ]

0 голосов
/ 11 ноября 2018

ответ Camickr здесь оптимален.

Вот SSCCE :

import java.awt.BorderLayout;
import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;

@SuppressWarnings("serial")
public class CalculatorFrame extends JFrame {

    public CalculatorFrame() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        getContentPane().setLayout(new BorderLayout());
        getContentPane().add(createClearPanel(), BorderLayout.PAGE_START);
        getContentPane().add(createTextArea(), BorderLayout.CENTER);
        getContentPane().add(createNumberPanels(), BorderLayout.PAGE_END);
        setSize(300, 300);
        pack();
    }

    private JPanel createNumberPanels() {
        JPanel main = new JPanel();
        main.setLayout(new GridLayout(4, 0));
        for (int i = 0; i < 16; i++) {
            JButton button = new JButton("" + i);
            main.add(button);
        }
        return main;
    }

    private JScrollPane createTextArea() {
        JTextArea area = new JTextArea(5, 10);
        JScrollPane sp = new JScrollPane(area);
        sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        return sp;
    }

    private JPanel createClearPanel() {
        JButton clearAll = new JButton("clear all");
        JButton clearLast = new JButton("Clear last");
        JPanel panel = new JPanel(new GridLayout(1, 0));
        panel.add(clearLast);
        panel.add(clearAll);
        return panel;
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new CalculatorFrame().setVisible(true));
    }
}

Предварительный просмотр:

Preview

P.S: Игнорировать тот факт, что я использовал только числа вместо операторов, таких как *,?, +, = И т. Д.

0 голосов
/ 10 ноября 2018

Проблема в том, что вы перестали использовать GridLayout.

Я бы посоветовал вам продолжать использовать менеджер по умолчанию для фрейма, который является BorderLayout.

Тогда вы бы сделали следующее:

  1. Создайте панель, используя GridLayout для двух кнопок. Добавьте эту панель к BorderLayout.PAGE_START кадра.

  2. Добавьте область прокрутки, содержащую текстовую область, к BorderLayout.CENTER рамки.

  3. Создайте панель, используя GridLayout для кнопок внизу. Добавьте эту панель к BorderLayout.PAGE_END кадра.

Прочтите раздел из учебника по Swing на Использование менеджеров по раскладке для получения дополнительной информации и рабочих примеров Borderlayout и GridLayout.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...