为什么用的随机数不能产生随机颜色和字体 不用随机数了颜色和字体的效果又能显示出来
import java.awt.*;
import javax.swing.*;
public class Char extends JFrame{
int i;
public Char(){
super("Draw characters");
setSize(300,300);
setVisible(true);
}
public void paint(Graphics g){
super.paint(g);
g.setColor(new Color((int)Math.random()*256,(int)Math.random()*256,(int)Math.random()*256));
i = (int)Math.random()*3;
switch(i){
case 0:
g.setFont(new Font("Serif",Font.BOLD,(int)Math.random()*8+12));
break;
case 1:
g.setFont(new Font("Monospaced",Font.ITALIC,(int)Math.random()*8+12));
break;
case 2:
g.setFont(new Font("SansSerif",Font.PLAIN,(int)Math.random()*8+12));
break;
default:
g.setFont(new Font("Serif",Font.ITALIC,(int)Math.random()*8+12));
break;
}
g.drawString("Happy New Year!",100,150);
}
public static void main(String args[]){
Char application = new Char() ;
application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
----------------解决方案--------------------------------------------------------
主要是括号问题..
import java.awt.*;
import javax.swing.*;
public class Char extends JFrame{
public Char(){
super("Draw characters");
setSize(300,300);
setVisible(true);
}
public void paint(Graphics g){
super.paint(g);
g.setColor(new Color((int)(Math.random()*256),(int)(Math.random()*256),(int)(Math.random()*256)));
int i = (int)(Math.random()*3);
System.out.println(i);
switch(i){
case 0:
g.setFont(new Font("Serif",Font.BOLD,(int)Math.random()*8+12));
break;
case 1:
g.setFont(new Font("Monospaced",Font.ITALIC,(int)Math.random()*8+12));
break;
case 2:
g.setFont(new Font("SansSerif",Font.PLAIN,(int)Math.random()*8+12));
break;
default:
g.setFont(new Font("Serif",Font.ITALIC,(int)Math.random()*8+12));
break;
}
g.drawString("Happy New Year!",100,150);
}
public static void main(String args[]){
Char application = new Char() ;
application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
----------------解决方案--------------------------------------------------------
^_^ 谢谢姐姐 一直没注意到那个括号 不过还是不懂为什么不加不可以
----------------解决方案--------------------------------------------------------
(int)Math.random()*256
如果你不加的话...它会先得到(int)Math.random()...得到0..然后再*255......结果一直..都是0..
----------------解决方案--------------------------------------------------------
楼 上的MM解释的很好,所以以后这种括号问题特别要小心
----------------解决方案--------------------------------------------------------
呵呵 谢谢啊 明白了 还想问一下 产生随机字体有没有什么好的方法啊
----------------解决方案--------------------------------------------------------
随机字体,就是先把系统的可用字体得到
然后产生它下标之内的随机数,去取下标就行了
Example:
String[] fontNames=java.awt.GraphicsEnvironment.getAvailableFontFamilyNames();//得到本系统的可用字体名
int index=(int)(Math.random*fontNames.length);//产生一个随机的下标
String getName=fontNames[index];
用此名字构造Font就行了
懂么
----------------解决方案--------------------------------------------------------
String[] fontNames=java.awt.GraphicsEnvironment.getAvailableFontFamilyNames();
这句不懂,数组在没有长度的条件下就可以用了吗?还有,我也不知道怎么把它放进程序里阿 不知道fontNames这个数组怎么定义
----------------解决方案--------------------------------------------------------
汗阿,说实话,我对Swing/awt忘记差不多了,帮不了你什么忙了 sorry yushui MM 不过purana倒是很细心的,我一开始也没发现这个问题
----------------解决方案--------------------------------------------------------
String[] fontNames=java.awt.GraphicsEnvironment.getAvailableFontFamilyNames();
这句不懂,数组在没有长度的条件下就可以用了吗?还有,我也不知道怎么把它放进程序里阿 不知道fontNames这个数组怎么定义
String[] fontNames=java.awt.GraphicsEnvironment.getAvailableFontFamilyNames();
这句想放哪里就放哪里,随便都能放
数组可以这样定义的,
fontNames就是那样定义
----------------解决方案--------------------------------------------------------