Creating a basic frame with 3 radio buttons and a submit button

dale1221 :
public void rotateGUI() {
   JFrame rotateFrame = new JFrame("Image Rotation");
   JRadioButton rotateLeft = new JRadioButton("Rotate Left");
   JRadioButton rotateRight = new JRadioButton("Rotate Right"); 
   JRadioButton upsideDown = new JRadioButton("Rotate Upside Down");
   JButton submit = new JButton("Submit");
   ButtonGroup rotateButtons = new ButtonGroup();
   rotateLeft.setBounds(120,30,120,50);
   rotateRight.setBounds(120,30,120,50);
   upsideDown.setBounds(120,30,120,50);
   submit.setBounds(125,90,80,30);
   rotateFrame.add(rotateLeft);
   rotateFrame.add(rotateRight);
   rotateFrame.add(upsideDown);
   rotateFrame.add(submit);
   rotateButtons.add(rotateLeft);
   rotateButtons.add(rotateRight);
   rotateButtons.add(upsideDown);
   submit.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent e) {
    if (rotateLeft.isSelected()) {    
          rotationAngle = 90; 
       } 
       else if (upsideDown.isSelected()) { 

              rotationAngle = 180; 
       } 
       else if (rotateRight.isSelected()){ 

              rotationAngle = 270;
       }
    }

        });
    rotateFrame.setBounds(200, 200, 400, 200);
    rotateFrame.setVisible(true);

I am trying to make a frame which has 3 radio buttons and a submit button, but no matter what I do whenever I run it it's just a frame with a big Submit button. What is wrong with my code? Thanks in advance.

Gilbert Le Blanc :

Instead of trying to place and size everything yourself, use Swing Layout Managers.

Here's the GUI I came up with.

Image Rotation GUI

Here are the changes I made.

  1. I added a call to the SwingUtilities invokeLater method to ensure that the Swing components are created and executed on the Event Dispatch Thread.

  2. I nested JPanels so I could use a BorderLayout and a GridLayout.

  3. I grouped Swing component method calls together and organized them by row and column. This makes it much much much easier to find and fix problems.

Here's the code.

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.SwingUtilities;

public class ExampleGUI {

    private int rotationAngle;

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new ExampleGUI().rotateGUI();
            }
        });
    }

    public void rotateGUI() {
        JFrame rotateFrame = new JFrame("Image Rotation");
        rotateFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel mainPanel = new JPanel();
        mainPanel.setLayout(new BorderLayout());
        mainPanel.setPreferredSize(new Dimension(300, 100));

        JPanel buttonPanel = new JPanel();
        buttonPanel.setLayout(new GridLayout(0, 1));

        ButtonGroup rotateButtons = new ButtonGroup();
        JRadioButton rotateLeft = new JRadioButton("Rotate Left");
        rotateButtons.add(rotateLeft);
        JRadioButton rotateRight = new JRadioButton("Rotate Right");
        rotateButtons.add(rotateRight);
        JRadioButton upsideDown = new JRadioButton("Rotate Upside Down");
        rotateButtons.add(upsideDown);

        buttonPanel.add(rotateLeft);
        buttonPanel.add(rotateRight);
        buttonPanel.add(upsideDown);

        mainPanel.add(buttonPanel, BorderLayout.BEFORE_FIRST_LINE);

        JButton submit = new JButton("Submit");
        submit.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (rotateLeft.isSelected()) {
                    rotationAngle = 90;
                } else if (upsideDown.isSelected()) {
                    rotationAngle = 180;
                } else if (rotateRight.isSelected()) {
                    rotationAngle = 270;
                }
            }
        });
        mainPanel.add(submit, BorderLayout.AFTER_LAST_LINE);

        rotateFrame.add(mainPanel);
        rotateFrame.pack();
        rotateFrame.setLocationByPlatform(true);
        rotateFrame.setVisible(true);
    }

}

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=370814&siteId=1