I find images are the best way of getting the point across easier so if you take a quick look at the image, you'll see what I have so far
The "Custom Dialogue Box" is what comes up after the user clicks "Change Alien Colour" from the Main Window, and that's where the problem arises.
I need the custom dialogue box to know what name the user has entered and what colour has been chosen from the JRadioButtons, and then once "OK" has been clicked it checks whether a name and colour have been chosen and changes that specific alien colour if both have been chosen, or displays an error Dialogue Box asking the user to input the name/choose a colour if they haven't.
CUSTOM DIALOGUE BOX CLASS import java.awt.*; import java.awt.event.*; import javax.swing.*; public class AlienColourDialog extends JDialog implements ActionListener { private JTextField alienname; private String prompt; private JButton OK, cancel; private boolean cancelled; private JRadioButton bodycolor1; private JRadioButton bodycolor2; private JRadioButton bodycolor3; private JRadioButton bodycolor4; private JRadioButton bodycolor5; private JRadioButton bodycolor6; private JRadioButton bodycolor7; private JRadioButton bodycolor8; public AlienColourDialog(Frame owner, String title, String prompt) { super(owner, title, true); setSize(400, 140); setResizable(false); setDefaultCloseOperation(HIDE_ON_CLOSE); this.prompt = prompt; cancelled = true; setupGUI(); setVisible(true); } private JPanel setupNorthPanel() { JLabel aliennamelabel = new JLabel("Alien name:", JLabel.CENTER); alienname = new JTextField(10); JPanel north = new JPanel(); north.setOpaque(true); north.add(aliennamelabel); north.add(alienname); return north; } private JPanel setupCenterPanel() { JLabel bodycolorlabel = new JLabel("Body colour:", JLabel.CENTER); bodycolor1 = new JRadioButton(""); bodycolor1.setBackground(Color.BLUE); bodycolor1.addActionListener(this); bodycolor2 = new JRadioButton(""); bodycolor2.setBackground(Color.CYAN); bodycolor2.addActionListener(this); bodycolor3 = new JRadioButton(""); bodycolor3.setBackground(Color.GREEN); bodycolor3.addActionListener(this); bodycolor4 = new JRadioButton(""); bodycolor4.setBackground(Color.MAGENTA); bodycolor4.addActionListener(this); bodycolor5 = new JRadioButton(""); bodycolor5.setBackground(Color.ORANGE); bodycolor5.addActionListener(this); bodycolor6 = new JRadioButton(""); bodycolor6.setBackground(Color.PINK); bodycolor6.addActionListener(this); bodycolor7 = new JRadioButton(""); bodycolor7.setBackground(Color.RED); bodycolor7.addActionListener(this); bodycolor8 = new JRadioButton(""); bodycolor8.setBackground(Color.YELLOW); bodycolor8.addActionListener(this); ButtonGroup bodycolorgroup = new ButtonGroup(); bodycolorgroup.add(bodycolor1); bodycolorgroup.add(bodycolor2); bodycolorgroup.add(bodycolor3); bodycolorgroup.add(bodycolor4); bodycolorgroup.add(bodycolor5); bodycolorgroup.add(bodycolor6); bodycolorgroup.add(bodycolor7); bodycolorgroup.add(bodycolor8); JPanel center = new JPanel(); center.setOpaque(true); center.add(bodycolorlabel); center.add(bodycolor1); center.add(bodycolor2); center.add(bodycolor3); center.add(bodycolor4); center.add(bodycolor5); center.add(bodycolor6); center.add(bodycolor7); center.add(bodycolor8); return center; } private JPanel setupSouthPanel() { OK = new JButton("OK"); OK.addActionListener(this); cancel = new JButton("Cancel"); cancel.addActionListener(this); JPanel south = new JPanel(); south.setOpaque(true); south.add(OK); south.add(cancel); return south; } public void setupGUI() { JPanel northPanel = setupNorthPanel(); JPanel centerPanel = setupCenterPanel(); JPanel southPanel = setupSouthPanel(); getContentPane().setBackground(Color.BLACK); getContentPane().setLayout(new BorderLayout(0, 0)); getContentPane().add(northPanel, BorderLayout.NORTH); getContentPane().add(centerPanel, BorderLayout.CENTER); getContentPane().add(southPanel, BorderLayout.SOUTH); } public void actionPerformed(ActionEvent e) { if (e.getSource() == cancel) { cancelled = e.getSource() == cancel; dispatchEvent( new WindowEvent(this, WindowEvent.WINDOW_CLOSING)); } else if (e.getSource() == OK) { try { //Try and change a specific aliens colour to what the user has input/chosen. } catch (Exception ex) { //If the user hasn't typed anything/chosen anything/inputs an incorrect name. At the moment this isn't showing if I click "OK" and have nothing entered in the fields.... JOptionPane.showMessageDialog(null, ex.getMessage(), "Missing data", JOptionPane.ERROR_MESSAGE); } } } }
THE MAIN WINDOW (ALIEN JFRAME) import java.awt.*; import java.awt.event.*; import javax.swing.*; public class AlienJFrame extends JFrame implements ActionListener { private AlienCanvas canvas; private JButton randomColourChange; private JButton sameColourChange; private JButton alienColourChange; private JButton help; public AlienJFrame(Alien[] alien) { super("Message dialogs"); setSize(400, 300); setLocation(200, 100); setDefaultCloseOperation(EXIT_ON_CLOSE); canvas = new AlienCanvas(alien); getContentPane().setBackground(new Color(0xabcdef)); getContentPane().add(canvas, BorderLayout.CENTER); getContentPane().add(setupSouthPanel(), BorderLayout.SOUTH); setVisible(true); } private JPanel setupSouthPanel() { JPanel southPanel = new JPanel(); southPanel.setLayout(new BoxLayout(southPanel, BoxLayout.Y_AXIS)); southPanel.add(createButtonPanel()); southPanel.add(createColourChangePanel()); return southPanel; } private JPanel createButtonPanel() { randomColourChange = new JButton("Random colours"); randomColourChange.addActionListener(this); sameColourChange = new JButton("Same colour"); sameColourChange.addActionListener(this); JPanel buttonPanel = new JPanel(); buttonPanel.setOpaque(true); buttonPanel.add(randomColourChange); buttonPanel.add(sameColourChange); return buttonPanel; } private JPanel createColourChangePanel() { alienColourChange = new JButton("Change alien colour"); alienColourChange.addActionListener(this); help = new JButton("Help"); help.addActionListener(this); JPanel p = new JPanel(); p.setOpaque(true); p.add(alienColourChange); p.add(help); return p; } public void actionPerformed(ActionEvent e) { if (e.getSource() == randomColourChange) { canvas.randomColourChange(); } else if (e.getSource() == sameColourChange) { canvas.sameColourChange(); } else if (e.getSource() == alienColourChange) { new AlienColourDialog(null, "Selecting an Aliens Colour", "Test1"); try { } catch (Exception ex) { JOptionPane.showMessageDialog(null, ex.getMessage(), "Missing data", JOptionPane.ERROR_MESSAGE); } } else if (e.getSource() == help) { JOptionPane.showMessageDialog(null, "To change an alien's body colour: \n *enter rhe alien's name in the text box \n *click the ''change alien colour'' button", "Changing an alien's colour", JOptionPane.INFORMATION_MESSAGE); } } }
ALIEN CLASS import java.awt.*; public abstract class Alien { /********************************************************* * * Class-level variables and methods * *********************************************************/ private static Color[] COLOUR_PALETTE = {Color.BLUE, Color.CYAN, Color.GREEN, Color.MAGENTA, Color.ORANGE, Color.PINK, Color.RED, Color.YELLOW}; private static int NEXT_INDEX = -1; public static Color getColour() { NEXT_INDEX++; return COLOUR_PALETTE[NEXT_INDEX % COLOUR_PALETTE.length]; } /********************************************************* * * Object-level variables and methods * *********************************************************/ private int x; private int y; private Color bodyColour; private String name; public Alien() { this(0, 0); } public Alien(int firstX, int firstY) { x = firstX; y = firstY; bodyColour = COLOUR_PALETTE[0]; name = "?"; } public void setPosition(int x, int y) { this.x = x; this.y = y; } public void setBodyColour(Color c) { bodyColour = c; } public Color getBodyColour() { return bodyColour; } public int getX() { return x; } public int getY() { return y; } public String getName() { return name; } public void setName(String name) { this.name = name; } public abstract void paint(Graphics g); public abstract int getWidth(); public abstract int getHeight(); }
Thanks a lot! And sorry for asking for more help ^^'!