2 Stimmen

Hilfe bei der Feststellung, welche Taste gedrückt wurde

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.util.Random;
/**
 *
 */
public class GUI
{
    private static final int BTN_MAX = 8;

    private JFrame frame;
    private JPanel panel;
    private JPanel scores;
    private JButton[] buttons;
    private ImageIcon[] icons;

    private Random rand;

    private ImageIcon beach;
    private ImageIcon lips;
    private ImageIcon discoball;
    private ImageIcon flowers;
    private ImageIcon blank;

    /**
     *
     */
    public GUI()
    {        
        beach = new ImageIcon("beach.jpg");
        lips = new ImageIcon("lips.jpg");
        discoball = new ImageIcon ("discoball.jpg");
        flowers = new ImageIcon ("flowers.jpg");
        blank = new ImageIcon ("blank.jpg");

        buttons = makeButtons();
        rand = new Random();
        startingCondition();

        icons = new ImageIcon[] { beach, lips, discoball, lips, beach, flowers, discoball, flowers};

        makeFrame();
        makeMenuBar(frame);        
        frame.pack();
        frame.setVisible(true);

    }

    /**
     * Makes the frame for the gui, inclusive of adding all components.
     */
    private void makeFrame()
    {
        int horizGap = 25; // Using this for spaces between the grid layout components
        int vertGap = 25;  // Using this for the spaces between the grid layout componeents

        frame = new JFrame("Noughts and Crosses");
        Container contentPane = frame.getContentPane();
        contentPane.setLayout(new GridLayout(4,2));//set layout of frame to BorderLayout

        for (int i = 0; i < BTN_MAX; i++){
            contentPane.add(buttons[i]);
        }
    }

    /**
     * 
     */
    private void makeMenuBar(JFrame frame)
    {             
        JMenuBar menubar = new JMenuBar();
        frame.setJMenuBar(menubar);

        JMenu menu;
        JMenuItem item;

        menu = new JMenu("File");
        menubar.add(menu);

        item = new JMenuItem("Reset Entire Game");
            item.addActionListener(new ActionListener() 
            {
               public void actionPerformed(ActionEvent e)
               { 
               }
            });
        menu.add(item);

        item = new JMenuItem("Reset This Game");
            item.addActionListener(new ActionListener() 
            {
               public void actionPerformed(ActionEvent e) 
               { 
               }
            });
        menu.add(item);    

        item = new JMenuItem("Quit");
            item.addActionListener(new ActionListener() 
            {
               public void actionPerformed(ActionEvent e) 
               { 
               }
            });
        menu.add(item);            

        frame.addWindowListener(new WindowAdapter()
        {
            public void windowClosing(WindowEvent e)
            {

            }
        });  

        menu = new JMenu("About");
        menubar.add(menu); 

        item = new JMenuItem("About The Game");
            item.addActionListener(new ActionListener() 
            {
               public void actionPerformed(ActionEvent e) 
               { 
               }
            });
        menu.add(item);
    }    

    /**
     * 
     */
    private JButton[] makeButtons()
    {
        final JButton button[] = new JButton[8];
        for (int i = 0; i < BTN_MAX; i++)
        {
            button[i] = new JButton("");
            button[i].setPreferredSize(new Dimension(200, 100));
            final int tmp = i;
            button[i].addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {  
                    checkForPair();
                    takeGo();
                }
            });
        }
        return button;
    }

    /**
     * 
     */
    private void startingCondition()
    {
        for (int i = 0; i < 8; i++){
            buttons[i].setIcon(blank);
        }
    }

    /**
     * 
     */
    public int returnButtonNumber()
    {
        return 0;
        // need to tell which button in the array has been clicked
        //so i can send a value to the takeGo method
        //appropriatley
    }  

    public ImageIcon getIcon(int number)
    {
        return icons[number];
    }

    /**
     * 
     */
    public boolean checkForPair()
    {
        return false;
    }

    /**
     * 
     */
    public void takeGo()
    {
        int i = returnButtonNumber();

        buttons[i].setIcon(getIcon(i));
    }
}

Hallo, ich war nur wundern, wenn jemand mir mit einer Methode helfen könnte, um zu bestimmen, welche Taste Nummer gedrückt wurde, dann kann ich diesen Wert an eine andere Methode senden, um ein entsprechendes Bild anzuzeigen, alle Ideen sind willkommen, obwohl könnten Sie bitte versuchen, kompletten Code so viel wie möglich zu vermeiden, wie ich versuchen möchte und es selbst tun, Beispiele wäre schön tho

Dankeschön

3voto

tddmonkey Punkte 19992

Um Ihnen so wenig Informationen wie möglich zu geben ;-)... schauen Sie sich JButton.setActionCommand() an

Außerdem sollten Sie, wenn Sie denselben ActionListener für jede Schaltfläche verwenden und prüfen, welche Schaltfläche gedrückt wurde, den ActionListener nur einmal instanziieren und zu jeder Schaltfläche hinzufügen, anstatt einen für jede Schaltfläche zu erstellen.

1voto

willcodejavaforfood Punkte 41426

Sie könnten ActionEvent.getSource() in Kombination mit Ihren JButton[] Buttons verwenden, um den Index des Buttons herauszufinden, der diese actionPerformed ausgelöst hat. Ich hoffe, das war kryptisch genug :)

1voto

Tom Hawtin - tackline Punkte 142461

Verwenden Sie eine andere Instanz von ActionListener für jede einzelne Aktion. Es kann durchaus dieselbe Klasse sein, die möglicherweise mit anderen Dingen in derselben parametrisierten Methode konstruiert wird.

Wie in:

    addItem("Quit", quitCommand);
...
private void addItem(String text, final Runnable command) {
    JMenuItem item = new JMenuItem(text);
    item.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent event) { 
            command.run();
        }
    });
    menu.add(item);  
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X