Java 随机彩色背景
我试图让这段代码在我按下“r”时将背景颜色更改为随机颜色。到目前为止,除了将背景颜色更改为随机颜色外,一切正常。这个程序是一个屏幕保护程序,我必须用随机颜色在随机位置生成随机形状Java 随机彩色背景,java,swing,graphics,keylistener,paintcomponent,Java,Swing,Graphics,Keylistener,Paintcomponent,我试图让这段代码在我按下“r”时将背景颜色更改为随机颜色。到目前为止,除了将背景颜色更改为随机颜色外,一切正常。这个程序是一个屏幕保护程序,我必须用随机颜色在随机位置生成随机形状 import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.Random; public class ScreenSaver1 extends JPanel { private JFrame frame
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Random;
public class ScreenSaver1 extends JPanel {
private JFrame frame = new JFrame("FullSize");
private Rectangle rectangle;
boolean full;
protected void paintComponent(Graphics g) {
super.paintComponent(g);
setBackground(Color.BLACK);
}
ScreenSaver1() {
// Remove the title bar, min, max, close stuff
frame.setUndecorated(true);
// Add a Key Listener to the frame
frame.addKeyListener(new KeyHandler());
// Add this panel object to the frame
frame.add(this);
// Get the dimensions of the screen
rectangle = GraphicsEnvironment.getLocalGraphicsEnvironment()
.getDefaultScreenDevice().getDefaultConfiguration().getBounds();
// Set the size of the frame to the size of the screen
frame.setSize(rectangle.width, rectangle.height);
frame.setVisible(true);
// Remember that we are currently at full size
full = true;
}
// This method will run when any key is pressed in the window
class KeyHandler extends KeyAdapter {
public void keyPressed(KeyEvent e) {
// Terminate the program.
if (e.getKeyChar() == 'x') {
System.out.println("Exiting");
System.exit(0);
}
else if (e.getKeyChar() == 'r') {
System.out.println("Change background color");
setBackground(new Color((int)Math.random() * 256, (int)Math.random() * 256, (int)Math.random() * 256));
}
else if (e.getKeyChar() == 'z') {
System.out.println("Resizing");
frame.setSize((int)rectangle.getWidth() / 2, (int)rectangle.getHeight());
}
}
}
public static void main(String[] args) {
ScreenSaver1 obj = new ScreenSaver1();
}
}
首先,我会移除
挫折背景(Color.BLACK)代码>从paintComponent
方法
你遇到的另一个问题是你计算随机值的方式
(int)Math.random() * 256
这基本上是将Math.random()
的结果转换为int
,这通常会导致它变成0
,然后再乘以256
,即0
相反,尝试使用类似
(int)(Math.random() * 256)
在将结果转换为int
之前,它将执行Math.random()*256
的计算
你可能还想看看……它会让你的生活变得更加美好……我会从消除挫折(Color.BLACK)开始代码>从paintComponent
方法
你遇到的另一个问题是你计算随机值的方式
(int)Math.random() * 256
这基本上是将Math.random()
的结果转换为int
,这通常会导致它变成0
,然后再乘以256
,即0
相反,尝试使用类似
(int)(Math.random() * 256)
在将结果转换为int
之前,它将执行Math.random()*256
的计算
你可能还想看看……它会让你的生活变得更加美好……试试这个:
(int)(Math.random() * 256)
或者这个:
Random gen= new Random();
getContentPane().setBackground(Color.Black);
要获取随机颜色,请尝试以下操作:
.setBackground(Color.(gen.nextInt(256), gen.nextInt(256),
gen.nextInt(256));
试试这个:
(int)(Math.random() * 256)
或者这个:
Random gen= new Random();
getContentPane().setBackground(Color.Black);
要获取随机颜色,请尝试以下操作:
.setBackground(Color.(gen.nextInt(256), gen.nextInt(256),
gen.nextInt(256));
我忘了重新油漆()。我只是用挫折背景(颜色.黑色)作为测试。当我这样做的时候,它只会从白色变为黑色。这也是有道理的。这就是它变黑的原因。@Ryel,没有必要重新绘制()。Swing足够聪明,可以在组件属性更改时重新绘制()-1用于重新绘制()建议+1其他两个建议。@ CAMKICR你赢得一些,你失去一些也考虑<代码>颜色。GethsbFror(R.NeXFLUATATE(),1, 1),其中<代码> R< /Cord>是<代码> Read < /Cord>的实例。我忘记了RePrimeTo()。我只是用挫折背景(颜色.黑色)作为测试。当我这样做的时候,它只会从白色变为黑色。这也是有道理的。这就是它变黑的原因。@Ryel,没有必要重新绘制()。Swing足够聪明,可以在组件属性更改时重新绘制()-1用于重新绘制()建议+1其他两个建议。@ CAMKICR你赢得一些,你失去一些也考虑<代码>颜色。GethsbFror(R NeXFLUATATE(),1, 1),<代码> R< /代码>是一个实例<代码> Read < /Cord>。请考虑格式化你的答案,它对我来说不是完全可读的。请考虑格式化你的答案,它对我来说不是完全可读的。