如何在JavaGUI中使用图像

如何在JavaGUI中使用图像,java,image,user-interface,jpanel,paintcomponent,Java,Image,User Interface,Jpanel,Paintcomponent,您好,我正在制作一个Gui程序,使用空布局和setBounds()方法进行布局。在节目中,我想在屏幕上随机打印25个字符串。我知道我可以用for循环来实现这一点,但是我一直在尝试这一点,但没有效果 public void paint(Graphics g){ super.paint(g); for(i=0;i<25;i++){ g.drawString("string name",Math.random()*250,Math.random()*250);

您好,我正在制作一个Gui程序,使用空布局和setBounds()方法进行布局。在节目中,我想在屏幕上随机打印25个字符串。我知道我可以用for循环来实现这一点,但是我一直在尝试这一点,但没有效果

public void paint(Graphics g){
    super.paint(g);
    for(i=0;i<25;i++){
        g.drawString("string name",Math.random()*250,Math.random()*250);
        g.setColor(Color.RED);
    }
}
public void绘制(图形g){
超级油漆(g);

对于(i=0;i您没有正确使用Math.random()部分,请尝试以下方法:

import java.awt.Color;
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;

/**
 *
 * @author David
 */
public class JavaApplication142 extends JFrame {

    private int width = 300, height = 300;

    public JavaApplication142() {
        createAndShowUI();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                JavaApplication142 jApp = new JavaApplication142();
            }
        });
    }

    private void createAndShowUI() {
        setTitle("Painting");
        setSize(width, height);
        setResizable(false);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        addComponentsToContentPane(getContentPane());
        setVisible(true);
    }

    private void addComponentsToContentPane(Container contentPane) {
        Panel panel1 = new Panel();
        contentPane.add(panel1);
    }

    class Panel extends JPanel {

        private Random rand;

        public Panel() {
            rand = new Random();
        }

        @Override
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            for (int i = 0; i < 25; i++) {
                g.drawString("string name", (int) rand.nextInt(width), (int) rand.nextInt(height));
                g.setColor(Color.RED);
            }
        }
    }
}
导入java.awt.Color;
导入java.awt.Container;
导入java.awt.EventQueue;
导入java.awt.Graphics;
导入java.util.Random;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
/**
*
*@作者大卫
*/
公共类JavaApplication142扩展了JFrame{
私有整数宽度=300,高度=300;
公共JavaApplication142(){
createAndShowUI();
}
/**
*@param指定命令行参数
*/
公共静态void main(字符串[]args){
invokeLater(新的Runnable(){
@凌驾
公开募捐{
JavaApplication142 jApp=新的JavaApplication142();
}
});
}
私有void createAndShowUI(){
片名(“绘画”);
设置尺寸(宽度、高度);
可设置大小(假);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(空);
addComponentsToContentPane(getContentPane());
setVisible(真);
}
私有void addComponentsToContentPane(容器内容窗格){
面板1=新面板();
contentPane.add(panel1);
}
类面板扩展了JPanel{
私有随机兰德;
公共事务委员会(){
rand=新随机数();
}
@凌驾
公共组件(图形g){
超级组件(g);
对于(int i=0;i<25;i++){
g、 抽绳(“字符串名称”,(int)rand.nextInt(宽度),(int)rand.nextInt(高度));
g、 setColor(Color.RED);
}
}
}
}
这将有助于在面板区域内绘制所有字符串,尽管长度不同的字符串可能会脱离屏幕,但只需添加一些额外的代码来检查字符串的长度,并适当地设置其词组
在循环中意味着“随机”值通常是相同的。OP使用的
Math.random()
解决了这个问题。要修复您的示例,请将
new random()
移动到循环之外,或者更好,将其声明为类属性并创建一次。“使用null布局和setBounds()方法进行布局”不要这样做,这是一条通往疯狂的道路。“一直不起作用”‘不起作用’对于告诉我们出了什么问题是没有用的。当它起作用时,你期望看到什么?你看到了什么?是否有任何错误或例外?