Cherios
Cherios

Reputation: 47

java swing Jframe not showing up correctly

Everything looks ok to me but for some reason, nothing is showing up properly, maybe I missed something but I'm not sure why it's not working, can someone help me out?

** task **

Improve your program by adding two combo boxes in the frame. Through the combo boxes, the user should be able to select their preferred fonts and font sizes. The displayed text will then be updated accordingly (see the figure below).

Here is what its suppose to look like enter image description here

import javax.swing.*;
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.JTextField;
import java.awt.*;
import java.awt.event.*;

public class ComboGUI extends JFrame implements ActionListener {

    public JButton update;
    public JTextField textField;
    public JLabel textLabel;
    public JComboBox<String> fontBox;
    public JComboBox sizeBox;
    
    public String font;
    public String size;
    
    public ComboGUI()
    {
        components();
        panels();
        actionListener();
    }
    
    public void components()
    {
        this.update = new JButton("update");
        this.textField=new JTextField(20);
        this.textField.setText("hello");
        this.textLabel= new JLabel("GUI");
        
        this.font="Arial";
        this.size="20";
        
        this.textLabel.setFont(new Font(this.font, Font.PLAIN, Integer.parseInt(this.size)));
        
        this.fontBox=new JComboBox();
        this.fontBox.addItem("Times New Roman");
         this.fontBox.addItem("Calibri");
         
        this.sizeBox= new JComboBox();
        this.sizeBox.addItem("20");
        this.sizeBox.addItem("30");
        this.sizeBox.addItem("40");
        
        this.setSize(400, 400);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setLocationRelativeTo(null);
        
    }
    
    public void panels(){
        JPanel northPanel =new JPanel();
        JLabel fontLabel =new JLabel("Font: ");
        JLabel sizeLabel =new JLabel("size: ");
        northPanel.add(fontLabel);
        
        
        //center
        BGPanel centerPanel =new BGPanel();
        centerPanel.add(this.textLabel);
        this.add(centerPanel,BorderLayout.CENTER);
        
        //south
         BGPanel southPanel =new BGPanel();
        southPanel.add(this.textLabel);
        this.add(southPanel,BorderLayout.CENTER);
          
    }
    
    public void actionListener(){
        this.update.addActionListener(this);
        this.fontBox.addActionListener(this);
        this.sizeBox.addActionListener(this);
        
    }
    
    
    @Override
    public void actionPerformed(ActionEvent e){
        if(e.getSource()==this.update){
            this.textLabel.setText(this.textField.getText());
            
        }
        if(e.getSource()==this.fontBox || e.getSource()==this.sizeBox){
            this.font=this.fontBox.getSelectedItem().toString();
            this.size=this.sizeBox.getSelectedItem().toString();
            this.textLabel.setFont(new Font(this.font,Font.PLAIN,Integer.parseInt(this.size)));
            
        }
        this.repaint();
    }
    
    public static void main(String[] args) {
        
       ComboGUI comb =new ComboGUI();
       combo.setVisible(true);
    }   

     

}
this is what im getting instead 

enter image description here

Upvotes: 0

Views: 144

Answers (2)

Cherios
Cherios

Reputation: 47

incase anyone is trying to do something similar, this is the complete solution


import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JComboBox;


public class ComboGUI extends JFrame implements ActionListener{
    
    
    public void updateLabelText(){
        size = fSize.getItemAt(fSize.getSelectedIndex());
        font = fStyles.getItemAt(fStyles.getSelectedIndex());
        updateLabel.setFont(new Font(font,Font.PLAIN,size));
    }
    
    public static BGPanel centrePanel;
    
    public  JComboBox<String> fStyles;
    public  JComboBox<Integer> fSize;
    public JButton updateButton;
    public  JLabel updateLabel;
    public  JLabel fontLabel;
    public  JLabel sizeLabel;
    public  JTextField textField;
    public  JPanel BottomPanel;
    public  JPanel topPanel;
    
    
    private String font;
    private int size;
    
    public ComboGUI() {
        
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(400,400);
        this.setLocation(0, 0);
        
        //Top
        topPanel = new JPanel();
        fontLabel = new JLabel("Font:");
        sizeLabel = new JLabel("Font Size:");
        
        fStyles = new JComboBox<String>();
        fStyles.addItem("Arial");
        fStyles.addItem("TimesRoman");
        fStyles.addItem("Serif");
        fStyles.addItem("Monospaced");
        fStyles.addActionListener(this);
        
        fSize = new JComboBox<Integer>();
        fSize.addItem(10);
        fSize.addItem(20);
        fSize.addItem(30);
        fSize.addItem(40);
 
        fSize.addActionListener(this);
        
        topPanel.add(fontLabel);
        topPanel.add(fStyles);
        topPanel.add(sizeLabel);
        topPanel.add(fSize);
        
        
        //CentrePanel setup
        centrePanel = new BGPanel();
        updateLabel = new JLabel("I love PDC :)");
        centrePanel.add(updateLabel);
        

        //Bottom
        BottomPanel = new JPanel();
        updateButton = new JButton("Update");
        textField  = new JTextField(20);
        textField.setText("I love PDC :)");
        updateButton.addActionListener(this);
        BottomPanel.add(textField);
        BottomPanel.add(updateButton);
       
       
        this.add(centrePanel,BorderLayout.CENTER);
        this.add(BottomPanel,BorderLayout.SOUTH);
        this.add(topPanel,BorderLayout.NORTH);
        
        updateLabelText();
    }
        
    public static void main(String[] args) {
        ComboGUI combo = new ComboGUI();
        combo.setVisible(true);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource() == updateButton){
            updateLabel.setText(textField.getText().trim());
        }
        if(e.getSource() == fStyles){
            updateLabelText();
        }
        
        if (e.getSource() == fSize){
             updateLabelText();
        }
        
    }
    
    
}

Upvotes: 0

Sour
Sour

Reputation: 21

It looks like you are missing this.setVisible(true); at the end of your constructor.

Your code should look like this:

public ComboGUI()
    {
        components();
        panels();
        actionListener();
        this.setVisible(true);
    }

Upvotes: 2

Related Questions