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