Java Jframe中JPanel的随机放置

Java Jframe中JPanel的随机放置,java,swing,random,Java,Swing,Random,我是一名Java初学者,我试图随机更改JFrame中JPanel的位置,或者随机更改JPanel中的标签。我设法得到了一个网格来随机改变颜色,我想我会尝试制作一些类似于《黑客帝国》电影开始时改变的1和0的东西。到目前为止,我无法达到预期的效果,希望得到一些帮助。在我的代码中,我有随机颜色变换器(我知道这不是我需要的,但我假设我需要向动作侦听器添加正确的代码)。 以下是我所拥有的: import java.awt.*; import java.awt.event.*; import javax.s

我是一名Java初学者,我试图随机更改JFrame中JPanel的位置,或者随机更改JPanel中的标签。我设法得到了一个网格来随机改变颜色,我想我会尝试制作一些类似于《黑客帝国》电影开始时改变的1和0的东西。到目前为止,我无法达到预期的效果,希望得到一些帮助。在我的代码中,我有随机颜色变换器(我知道这不是我需要的,但我假设我需要向动作侦听器添加正确的代码)。 以下是我所拥有的:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Random;

public class MatrixGrid extends JFrame {
    final int grid = 20;
    final int pnlCnt = grid * grid;
    final JFrame frame = new JFrame("WELCOME TO THE MATRIX");
    final JPanel[] panels = new JPanel[pnlCnt];
    Timer t;

    public MatrixGrid() {
        for (int i = 0; i < panels.length; i++) {
            final String[] labels = new String[]{"0", "1"};
            Random rand = new Random(); 
            int index = rand.nextInt(labels.length);
            String randomTitle = labels[index];
            JLabel label = new JLabel(randomTitle, JLabel.CENTER);
            label.setForeground(Color.green);
            label.setVerticalAlignment(JLabel.CENTER);
            panels[i] = new JPanel();
            panels[i].setBackground(Color.BLACK);
            panels[i].add(label);
            frame.getContentPane().add(panels[i]);
            }
        frame.setLayout(new GridLayout(grid,grid));
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setExtendedState(java.awt.Frame.MAXIMIZED_BOTH);
        frame.setVisible(true);

        //I know this won't do what I want, but I think this is where I need 
        //to add code to randomize the panels or labels
        ActionListener action = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                for (int i = 0; i < panels.length; i++) {
                    Color mix = new Color(255,255,255);
                    Random random = new Random();
                    int r = random.nextInt(255);
                    int g = random.nextInt(255);
                    int b = random.nextInt(255);

                    if(mix != null) 
                    {
                        r = (r + mix.getRed()) / 2;
                        g = (g + mix.getGreen()) / 2;
                        b = (b + mix.getBlue()) / 2;
                        }
                    Color color = new Color(r, g, b);
                    panels[i].setBackground(color);
                    }
                }
            };

        t = new Timer(100, action);
        t.setRepeats(true);
        t.start();
        }
    public static void main(String args[]) {
        MatrixGrid q = new MatrixGrid();
        }
    }
import java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
导入java.util.Random;
公共类MatrixGrid扩展JFrame{
最终整数网格=20;
最终int pnlCnt=网格*网格;
最终JFrame=新JFrame(“欢迎来到矩阵”);
最终JPanel[]面板=新JPanel[pnlCnt];
定时器t;
公共矩阵网格(){
对于(int i=0;i

有人能给我指出正确的方向吗?我一直在谷歌上搜索,直到我的眼睛快要从脑袋里掉出来。任何帮助都将不胜感激。干杯我不知道我是否做了你想做的事。 我在构造函数中更改了

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Random;

public class NewClass extends JFrame {

final int grid = 20;
final int pnlCnt = grid * grid;
final JFrame frame = new JFrame("WELCOME TO THE MATRIX");
final JPanel[] panels = new JPanel[pnlCnt];
Timer t;

public NewClass() {
    for (int i = 0; i < panels.length; i++) {
        final String[] labels = new String[]{"0", "1"};
        final Random rand = new Random();
        int index = rand.nextInt(labels.length);
        String randomTitle = labels[index];
        final JLabel label = new JLabel(randomTitle, JLabel.CENTER);
        Timer lblt = new Timer(00, new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
               label.setText(labels[rand.nextInt(labels.length)]);
            }
        });
        lblt.setRepeats(true);
        lblt.start();
        label.setForeground(Color.green);
        label.setVerticalAlignment(JLabel.CENTER);
        panels[i] = new JPanel();
        panels[i].setBackground(Color.BLACK);
        panels[i].add(label);
        frame.getContentPane().add(panels[i]);
    }
    frame.setLayout(new GridLayout(grid, grid));
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setExtendedState(java.awt.Frame.MAXIMIZED_BOTH);
    frame.setVisible(true);

    //I know this won't do what I want, but I think this is where I need 
    //to add code to randomize the panels or labels
    ActionListener action = new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            for (int i = 0; i < panels.length; i++) {
                Color mix = new Color(255, 255, 255);
                Random random = new Random();
                int r = random.nextInt(255);
                int g = random.nextInt(255);
                int b = random.nextInt(255);

                if (mix != null) {
                    r = (r + mix.getRed()) / 2;
                    g = (g + mix.getGreen()) / 2;
                    b = (b + mix.getBlue()) / 2;
                }
                Color color = new Color(r, g, b);
                panels[i].setBackground(color);
            }
        }
    };

    t = new Timer(00, action);
    t.setRepeats(true);
    t.start();
}

public static void main(String args[]) {
    NewClass q = new NewClass();
    }
}
import java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
导入java.util.Random;
公共类NewClass扩展了JFrame{
最终整数网格=20;
最终int pnlCnt=网格*网格;
最终JFrame=新JFrame(“欢迎来到矩阵”);
最终JPanel[]面板=新JPanel[pnlCnt];
定时器t;
公共类(){
对于(int i=0;i

编辑:我把整个代码放进去,试着运行它,看看它是否符合你的要求。

你想实现什么功能?我想让1和0随机移动。我不知道是否可以通过随机面板放置或随机标签来实现。我想要黑色背景下的绿色1和0。当我在监听器中注释掉颜色变换器时,我得到的是一个静态版本