Platzieren Sie das Bild beim Zufallsnetzpunkt auf der Schaltfläche Klicken Sie auf die Schaltfläche

StackOverflow https://stackoverflow.com/questions/20353546

Frage

Ich benutze Java mit Windows Builder. Ich habe ein 4x4 -Raster aus JLabels (jeder Rasterpunkt ist ein anderes JLabel) auf meinem JFrame erstellt. Ich habe auch einen Knopf namens Btnplace. Ich möchte ein Bild an einem zufälligen Gitterpunkt auf der Schaltfläche Klicken auf dem Button erscheinen lassen. Die Bilddatei heißt rot.png, ein roter Kreis. Das Bild kann an jedem Rasterpunkt mit Ausnahme der Gitterpunktzahl 1 angezeigt werden.
So etwas wie folgt: http://i.stack.imgur.com/bbn6d.png

Hier ist mein Code:

public class grid {

public static void main (String[] args) 
{ 

    JFrame grid =new JFrame();
    grid.setDefaultCloseOperation 
    (JFrame.EXIT_ON_CLOSE); 

    JPanel set = new JPanel();      
    set.setBounds(10, 11, 307, 287);
    grid.getContentPane().add(set);
    set.setLayout(new GridLayout(4, 4, 0, 0));

    JLabel a = new JLabel("");
    set.add(a);

    JLabel b = new JLabel("");      
    set.add(b);

    JLabel c = new JLabel("");      
    set.add(c);

    ^^ this repeats up to JLabel p. just to save time.

    JButton btnPlace = new JButton("Place");        
    grid.getContentPane().add(btnPlace);
    grid.setVisible(true); 
}   }
War es hilfreich?

Lösung

Hier ist ein volles Beispiel: Beispiel:

Wenn Sie beim Drücken der Taste das Bild auf zufällig ausgewählte Zeichnen zeichnen JLabel

package stackoverflow;

import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class DummyColor {

    private JFrame frame;
    private JLabel[] labels = new JLabel[4];

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    DummyColor window = new DummyColor();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     */
    public DummyColor() {
        initialize();
    }

    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        frame = new JFrame();
        frame.setResizable(false);
        frame.setBounds(100, 100, 657, 527);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);

        JLabel lbl1 = new JLabel("First BOX");
        lbl1.setBounds(10, 11, 273, 194);

        frame.getContentPane().add(lbl1);

        JLabel label = new JLabel("Second BOX");
        label.setBounds(336, 11, 273, 194);
        frame.getContentPane().add(label);

        JLabel label_1 = new JLabel("Third  BOX");
        label_1.setBounds(10, 251, 273, 194);
        frame.getContentPane().add(label_1);

        JLabel label_2 = new JLabel("Fourth BOX");
        label_2.setBounds(347, 251, 273, 194);
        frame.getContentPane().add(label_2);

        labels[0] = lbl1;
        labels[1] = label;
        labels[2] = label_1;
        labels[3] = label_2;

        JButton btnPick = new JButton("Place");
        btnPick.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                ImageIcon imageIcon = new ImageIcon(DummyColor.class.getResource("/red.jpg"));
                int randInt = randInt(1, 4);
                System.out.println(randInt);

                for (int i = 0; i < labels.length; i++) {
                    JLabel jLabel = labels[i];

                    if (i == randInt - 1) {
                        jLabel.setIcon(imageIcon);
                    } else {
                        jLabel.setIcon(null);
                    }

                }

            }
        });
        btnPick.setBounds(10, 439, 57, 23);
        frame.getContentPane().add(btnPick);
    }

    private static int randInt(int min, int max) {

        // Usually this can be a field rather than a method variable
        Random rand = new Random();

        // nextInt is normally exclusive of the top value,
        // so add 1 to make it inclusive
        int randomNum = rand.nextInt((max - min) + 1) + min;

        return randomNum;
    }
}

Andere Tipps

Ich würde ein benutzerdefiniertes JPanel erstellen und einen Mouselistener hinzufügen. Wenn das Panel geklickt wird, wird an diesem Punkt ein Bild gezeichnet, das auf das Panel geklickt wird

public class grid{
    public static void main(String[] args){
        JFrame frame = new JFrame();
        frame.add(new MyPanel());
    }
}

class MyPanel extends JPanel{
    Point p;
    BufferedImage img;

    addMouseListener(new MouseAdapter(){
        public void mouseClicked(MouseEvent e){
            p = e.getLocationOnScreen();
            repaint();
        }
    });

    @Override
    protected void paintComponent(Graphics g){
        super.paintComponent(g);
        try{
            img = ImageIO.read("someImage.png");
        }catch(Exception e){e.printStackTrace();}

        g.drawImage(img, p.getX(), p.getY(), width, height, this);
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top