Results 1 to 4 of 4
  1. #1
    manibby93 is offline Member
    Join Date
    Sep 2013
    Posts
    77
    Rep Power
    0

    Default Calculator: Buttons don't show up on Test JFrame class from JPanel class(w/ bg image)

    Calculator: Buttons don't show up on Test JFrame class from JPanel class(w/ bg image)-calc.jpg

    There's a lot going on. I don't know if my title makes sense because I'm still trying to learn Java and the terms, until the end of this semester, that is.

    Basically, the buttons only show up when I hover over them.

    I used a template. I was told to add buttons to the JFrame on another post (these are TOTALLY different questions btw).

    These are my questions:

    To add buttons to the JFrame, am I supposed to literally move them to the JFrame, as in take them out of the JPanel (SimpleArithmeticCalculator) class? or can I reference them somehow without moving all of that code? I hope doing frame.add (new JButton ("")); isn't the only way. I have frame.getContentPane().add(calc); but that's not working of course. Could I replace "calc" w/ "buttons" or something?

    Also, can I make the JFrame a fixed size (the size in the Test class code)?

    Code may be redundant, but I'm just trying to make everything work.

    Java Code:
    import javax.swing.*;
    
    import java.awt.*;
    
    import java.awt.event.*;
    
    public class SimpleArithmeticCalculator extends JPanel implements ActionListener {
    
     private static final int BTN_ONE = 0;
     
     private static final int BTN_TWO = 1;
     
     private static final int BTN_THREE = 2;
     
     private static final int BTN_PLUS = 3;
     
     private static final int BTN_MINUS = 4;
     
     private static final int BTN_FOUR = 5;
     
     private static final int BTN_FIVE = 6;
     
     private static final int BTN_SIX = 7;
     
     private static final int BTN_MULT = 8;
     
     private static final int BTN_DIV = 9;
     
     private static final int BTN_SEVEN = 10;
     
     private static final int BTN_EIGHT = 11;
     
     private static final int BTN_NINE = 12;
     
     private static final int BTN_POWER = 13;
     
     private static final int BTN_PERCENT = 14;
     
     private static final int BTN_ZERO = 15;
     
     private static final int BTN_DECIMAL = 16;
     
     private static final int BTN_BACKSPACE = 17;
     
     private static final int BTN_CALC = 18;
     
     private static final int BTN_CLEAR = 19;
     
     private static final int NUM_BUTTONS = 20;
     
     
    
     private static final int OP_MULT = 0;
    
     private static final int OP_DIV = 1;
     
     private static final int OP_PLUS = 2;
     
     private static final int OP_MINUS = 3;
     
     private static final int OP_POWER = 4;
     
     private static final int OP_PERCENT = 5;
     
     private static char[] buttonTexts = {'1' , '2' , '3' , '+' , '-' ,
                '4' , '5' , '6' , '*' , '/' ,
                '7' , '8' , '9' , '^' , '%' ,
                '0' , '.' , '<' , '=' , 'C'};
    
     private static final int[] buttonKeys = {
      KeyEvent.VK_NUMPAD1 , KeyEvent.VK_NUMPAD2 , KeyEvent.VK_NUMPAD3 , KeyEvent.VK_PLUS     , KeyEvent.VK_MINUS ,
      KeyEvent.VK_NUMPAD4 , KeyEvent.VK_NUMPAD5 , KeyEvent.VK_NUMPAD6 , KeyEvent.VK_MULTIPLY , KeyEvent.VK_DIVIDE ,
      KeyEvent.VK_NUMPAD7 , KeyEvent.VK_NUMPAD8 , KeyEvent.VK_NUMPAD9 , '%'      , '%' ,
      KeyEvent.VK_NUMPAD0 , KeyEvent.VK_STOP    , KeyEvent.VK_BACK_SPACE , KeyEvent.VK_ENTER , KeyEvent.VK_C
     };
     
     private Font font;
    
     private JButton[] buttons;
     
     private JTextField displayText;
    
     public JPanel calcPanel;
     
     private JPanel textPanel;
     
     private JPanel buttonPanel;
    
     private String buffer;
     
     private int op;
     
     private int opStored;
     
     private double lhs;
     
     private double rhs;
     
     private double rhsStored;
     
     private boolean left;
     
     private boolean clear;
     
     private char lastAction;
    
        public SimpleArithmeticCalculator() {
    
         super();
    
      buffer = new String("0.0");
    
      op = -1;
      
      opStored = -1;
      
      lhs = 0.0;
      
      rhs = 0.0;
      
      rhsStored = 0.0;
      
      left = true;
      
      clear = true;
      
      lastAction = '=';
    
         font = Font.decode("Courier PLAIN 24");
    
         try {
    
           UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
         
         }
         
         catch (Exception e) {
           
         }
    
      calcPanel = new JPanel();
         
      textPanel = new JPanel();
      
      buttonPanel = new JPanel();
    
      buttonPanel.setForeground(Color.blue);
      
      textPanel.setForeground(Color.blue);
      
      calcPanel.setForeground(Color.blue);
    
      textPanel.setLayout(new GridLayout(0,1,0,0));
         
      buttonPanel.setLayout(new GridLayout(0 , 5 , 5 , 5));
    
      displayText = new JTextField("" , 20);
      
      displayText.setHorizontalAlignment(JTextField.RIGHT);
      
      displayText.setFont(font);
      
      displayText.setEditable(false);
      
      textPanel.add(displayText);
    
      buttons = new JButton[NUM_BUTTONS];
      
      for (int i = 0 ; i < NUM_BUTTONS ; ++i) {
      
        buttons[i] = new JButton("" + buttonTexts[i]);
        
        buttons[i].setMnemonic(buttonKeys[i]);
        
        buttons[i].setFont(font);
        
        buttons[i].setMinimumSize(new Dimension(50,50));
        
        buttons[i].setActionCommand("" + buttonTexts[i]);
        
        buttons[i].addActionListener(this);
        
        buttonPanel.add(buttons[i]);
        
      }
      
      buttons[BTN_POWER].setText("^");
      
      buttons[BTN_PERCENT].setText("%");
      
      buttonPanel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
         
      textPanel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
    
      calcPanel.setLayout(new BorderLayout());
      
      calcPanel.add(textPanel , BorderLayout.NORTH);
      
      calcPanel.add(buttonPanel , BorderLayout.CENTER);
      
      add(calcPanel);
      
      setMinimumSize(getSize());
      
      setPreferredSize(getSize());
      
         for (int i = 0 ; i < NUM_BUTTONS ; ++i) {
      
           buttons[i].setMaximumSize(buttons[i].getSize());
           
         }
         
         }
    
     public void SetColors(Color bg , Color textbg , Color textcolor) {
      
       calcPanel.setBackground(new Color(0,250,154));
       
       buttonPanel.setBackground(new Color(0,250,154));
      
       textPanel.setBackground(new Color(0,250,154));
      
       displayText.setBackground(Color.white);
      
       displayText.setForeground(new Color(0,206,209));
       
       for (int i = 0 ; i < NUM_BUTTONS ; ++i) {
       
         buttons[i].setForeground(textcolor);
      
       }
     
     }
    
     public void actionPerformed(ActionEvent ev) {
    
      String action = ev.getActionCommand();
      
      char c = action.charAt(0);
      
      boolean calc = false;
    
     if (c == buttonTexts[BTN_CLEAR]) {
    
       buffer = "";
     
       left = true;
    
     }
     
     else if (c == buttonTexts[BTN_BACKSPACE]) {
     
       if (buffer.length() > 0) {
       
         buffer = buffer.substring(0 , buffer.length() - 1);
    
       }
       
       if (lastAction == buttonTexts[BTN_CALC]) {
       
         left = true;
    
       }
       
       clear = false;
    
     }
     
     else if ((c == buttonTexts[BTN_CALC]) || isOpCharacter(c)) {
     
       int opCurrent = op;
       
       if (c == buttonTexts[BTN_CALC]) {
    
        if (!left) {
       
          calc = true;
         
          if (isOpCharacter(lastAction)) {
          
            rhs = GetBufferValue();
          
            rhsStored = rhs;
          
            opCurrent = op;
          
            opStored = op;
         
          }
         
          else if (lastAction == buttonTexts[BTN_CALC]) {
    
          rhs = rhsStored;
          
          opCurrent = opStored;
         
          }
         
          else {
    
          rhs = GetBufferValue();
          
          rhsStored = rhs;
          
          opCurrent = op;
          
          opStored = op;
         
          }
        
        }
       
       }
       
       else if (isOpCharacter(c)) {
    
        opStored = op;
       
        if (c == buttonTexts[BTN_MULT])  {op = OP_MULT;}
        
        if (c == buttonTexts[BTN_DIV])   {op = OP_DIV;}
        
        if (c == buttonTexts[BTN_PLUS])  {op = OP_PLUS;}
        
        if (c == buttonTexts[BTN_MINUS]) {op = OP_MINUS;}
        
        if (c == buttonTexts[BTN_POWER])  {op = OP_POWER;}
        
        if (c == buttonTexts[BTN_PERCENT]) {op = OP_PERCENT;}
    
        if (lastAction == buttonTexts[BTN_CALC]) {
    
          lhs = GetBufferValue();
         
          clear = true;
        
        }
        
        else if (isOpCharacter(lastAction)) {
    
        }
        
        else {
    
        
          if (left) {
          
            lhs = GetBufferValue();
          
            left = false;
         
          }
         
          else {
          
            calc = true;
          
            rhs = GetBufferValue();
          
            opCurrent = opStored;
          
            opStored = op;
         
          }
         
          clear = true;
        
        }
       
       }
       
       if (calc) {
    
        double result = 0.0;
       
        if (opCurrent == OP_MULT)  {result = lhs * rhs;}
        
        if (opCurrent == OP_DIV)   {result = lhs / rhs;}
        
        if (opCurrent == OP_PLUS)  {result = lhs + rhs;}
        
        if (opCurrent == OP_MINUS) {result = lhs - rhs;}
        
        if (opCurrent == OP_POWER) {result = Math.pow(lhs,rhs);}  
        
        if (opCurrent == OP_PERCENT) {result = lhs / 100;}
    
        lhs = result;
    
        buffer = "" + result;
        
        clear = true;
       
       }
       
      }
      
     else {
     
       if (lastAction == buttonTexts[BTN_CALC]) {
    
        left = true;
       
       }
       
       if (clear) {
    
        buffer = "";
       
        clear = false;
       
       }
       
       if (c == buttonTexts[BTN_DECIMAL]) {
    
        if (buffer.indexOf('.') == -1) {
         
         if (buffer.length() == 0 || (buffer.length() == 1 && buffer.charAt(0) == '-')) {
       
           buffer += "0";
         
         }
         
         buffer += ".";
        
        }
       
       }
       
       else if (c == buttonTexts[BTN_ZERO]) {
        
        if (buffer.length() == 0 || (buffer.length() == 1 && buffer.charAt(0) == '-')) {
       
          buffer += "0.";
        
        }
        
        else if (buffer.length() > 0 && (isNonZeroNumber(buffer.charAt(0)) ||
                (buffer.charAt(0) == '-' && isNonZeroNumber(buffer.charAt(1))))) {
        
          buffer += "0";
        
        }
        
        else if (buffer.compareTo("0") == 0 || buffer.compareTo("-0") == 0) {
    
        }
        
        else {
        
          buffer += "0";
        
        }
       
       }
       
       else {
     
        if (!buffer.equals("0") && !buffer.equals("-0")) {
    
          buffer += c;
        
        }
       
       }
      
     }
      
      lastAction = c;
     
      displayText.setText(buffer);
     
     }
    
     public double GetBufferValue() {
     
       double d = 0.0;
      
       try {
       
         d = Double.parseDouble(buffer);
      
       }
      
       catch (NumberFormatException e) {
       
       System.out.println("NumberFormatException in GetBufferValue()");
      
       }
      
       return d;
    
     }
     
     public boolean isOpCharacter(char c) {
     
       return ((c == buttonTexts[BTN_MULT]) ||
       
               (c == buttonTexts[BTN_DIV]) ||
        
               (c == buttonTexts[BTN_PLUS]) ||
        
               (c == buttonTexts[BTN_MINUS]) ||
        
               (c == buttonTexts[BTN_POWER]) ||
        
               (c == buttonTexts[BTN_PERCENT]));
      
     }
     
     public boolean isNumericCharacter(char c) {
       
      return ((c == buttonTexts[BTN_ZERO]) ||
              
        (c == buttonTexts[BTN_ONE]) ||
              
        (c == buttonTexts[BTN_TWO]) ||
              
        (c == buttonTexts[BTN_THREE]) ||
              
        (c == buttonTexts[BTN_FOUR]) ||
              
        (c == buttonTexts[BTN_FIVE]) ||
              
        (c == buttonTexts[BTN_SIX]) ||
              
        (c == buttonTexts[BTN_SEVEN]) ||
              
        (c == buttonTexts[BTN_EIGHT]) ||
              
        (c == buttonTexts[BTN_NINE]) ||
              
        (c == buttonTexts[BTN_DECIMAL]));
      
     }
     
     public boolean isNonZeroNumber(char c) {
       
      return (c == buttonTexts[BTN_ONE] ||
              
        c == buttonTexts[BTN_TWO] ||
              
        c == buttonTexts[BTN_THREE] ||
              
        c == buttonTexts[BTN_FOUR] ||
              
        c == buttonTexts[BTN_FIVE] ||
              
        c == buttonTexts[BTN_SIX] ||
              
        c == buttonTexts[BTN_SEVEN] ||
              
        c == buttonTexts[BTN_EIGHT] ||
              
        c == buttonTexts[BTN_NINE]);
      
     }
     
        public static void main(String[] args) {
    
    }
    
    }
    Java Code:
    import java.awt.Dimension;
    
    import java.awt.Graphics;
    
    import java.awt.Image;
    
    import javax.swing.ImageIcon;
    
    import javax.swing.JPanel;
    
    import javax.swing.JFrame;
    
    public class TestCalculator2 {
    
      public static void main(String[] args) {
    
        ImagePanel panel = new ImagePanel(new ImageIcon("01_Crane_AGweb.jpg").getImage());
        
        JFrame frame = new JFrame(TestCalculator2.class.getSimpleName());
            
        SimpleArithmeticCalculator calc = new SimpleArithmeticCalculator();  
            
            calc.setVisible(true);
    
            calc.setOpaque(true);
                 
            panel.setVisible(true);
                    
            panel.setOpaque(false);
            
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
            frame.pack();
    
            frame.add(calc);       
    
            frame.add(panel);  
            
            frame.getContentPane().add(calc);     
            
            frame.setVisible(true);
       
            frame.setPreferredSize(new Dimension(358,379));
        
            frame.setMinimumSize(new Dimension(358,379));
        
            frame.setMaximumSize(new Dimension(358,379));
        
            frame.setSize(new Dimension(358,379));
            
            frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
     
      }
    
    }
    
    class ImagePanel extends JPanel {
    
      private Image img;
    
      public ImagePanel(String img) {
    
        this(new ImageIcon(img).getImage());
      
      }
    
      public ImagePanel(Image img) {
      
        this.img = img;
            
        Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));
    
        
    
        
        this.setPreferredSize(new Dimension(size));
        
        this.setMinimumSize(new Dimension(size));
        
        this.setMaximumSize(new Dimension(size));
        
        this.setSize(new Dimension(size));
        
    
      
       this.setLayout(null);
      
      }
    
        public void paintComponent(Graphics g) {
          
            super.paintComponent(g);
            
            g.drawImage(img, 0, 0, this.getWidth(),this.getHeight(),this);
            
        }
    
    }
    Last edited by manibby93; 12-07-2013 at 09:59 PM.

  2. #2
    manibby93 is offline Member
    Join Date
    Sep 2013
    Posts
    77
    Rep Power
    0

    Default Re: Calculator: Buttons don't show up on Test JFrame class from JPanel class(w/ bg im

    I need help ASAP, please, like come on...

  3. #3
    Norm's Avatar
    Norm is offline Moderator
    Join Date
    Jun 2008
    Location
    Eastern Florida
    Posts
    17,578
    Rep Power
    25

    Default Re: Calculator: Buttons don't show up on Test JFrame class from JPanel class(w/ bg im

    Having all those blank lines makes the code hard to work with. Can you post a version without all the extra blank lines?

    Java Code:
       frame.add(calc);       
     
            frame.add(panel);  
             
            frame.getContentPane().add(calc);
    How are you telling the layout manager where to put the components that are being added to the GUI? The default layout manager for a JFrame is BorderLayout. It has several regions where components can be placed. I don't know what will happen when two/three components are added to the same region. You need to look at how to use the layout manager to get the components where you want them.
    Last edited by Norm; 12-08-2013 at 12:54 PM.
    If you don't understand my response, don't ignore it, ask a question.

  4. #4
    manibby93 is offline Member
    Join Date
    Sep 2013
    Posts
    77
    Rep Power
    0

    Default Re: Calculator: Buttons don't show up on Test JFrame class from JPanel class(w/ bg im

    I already fixed it. I had to reorder that exact part you pointed out. I reordered it to frame > panel > calc. Now I'm having trouble making the frame NOT resizable. I used frame.setResizable(false); but it adds a few pixels w/in the window. I don't know how to just keep the dimension the same.

    Also, somebody told me to put lines b/w so that the code would be more readable.
    Last edited by manibby93; 12-08-2013 at 09:39 PM.

Similar Threads

  1. Error: Could not find or load main class Test.class
    By java_aim in forum New To Java
    Replies: 11
    Last Post: 08-13-2013, 05:05 PM
  2. JTextField on JPanel-class within JFrame-class
    By floris in forum AWT / Swing
    Replies: 5
    Last Post: 06-25-2012, 12:54 PM
  3. Replies: 2
    Last Post: 10-17-2011, 08:04 PM
  4. Replies: 5
    Last Post: 10-02-2011, 02:55 AM
  5. Replies: 8
    Last Post: 03-21-2009, 09:34 AM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •