Java 如何使用imageArray将每个单词的图像转换为另一个单词

Java 如何使用imageArray将每个单词的图像转换为另一个单词,java,arrays,swing,Java,Arrays,Swing,我制作了5个java类,它们的目标是将英语翻译成法语,并在单击Jbutton时设置在Jfield1中写入的每个单词的图像。 我的小程序将JField1中的每个英语单词翻译成JField2中的法语单词。我还添加了另外两个类(ImageImplement和ImageInFrame)来设置图像,但不幸的是没有任何效果。我真的不知道如何使用imageArray。 请帮帮我 对不起,我的英语不是很好 这是我的小程序 我的第一堂课是StringArrayEnglishWord 公共类StringArrayE

我制作了5个java类,它们的目标是将英语翻译成法语,并在单击Jbutton时设置在Jfield1中写入的每个单词的图像。 我的小程序将JField1中的每个英语单词翻译成JField2中的法语单词。我还添加了另外两个类(ImageImplement和ImageInFrame)来设置图像,但不幸的是没有任何效果。我真的不知道如何使用imageArray。 请帮帮我

对不起,我的英语不是很好

这是我的小程序

我的第一堂课是StringArrayEnglishWord

公共类StringArrayEnglishWords扩展了JPanel{

String[] names;
Graphics2D g2d;

public StringArrayEnglishWords(){
    EnglishWords();
    // drawNames();
}

public void paintComponent (Graphics g) {
    super.paintComponent(g);
    Graphics2D g2d = (Graphics2D) g;
    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
}

public void EnglishWords(){

    names=new String[16];
    names[0]="Tomatoes";
    names[1]="Chairs";
    names[2]="Car";
    names[3]="Computer";
    names[4]="Flowers";
    names[5]="Family";
    names[6]="Sister";
    names[7]="Husband";
    names[8]="God";
    names[9]="Book";
    names[10]="Watch";
    names[11]="Pencil";
    names[12]="Bottle";
    names[13]="Map";
    names[14]="Wife";
    names[15]="Bag";


}

public void drawNames(){
    for (int i=0; i<names.length; i++){
        g2d.drawString(names[i], 50, (1+i)*16);
    }
}

   public int indexOfWord(String userInput)
{
    for(int i=0;i<names.length;i++)
    {
        if(userInput.equals(names[i])){return i;}

    }
    return -1;
}
String[] names2;
Graphics2D g2d;

public StringArrayFrenchWords(){
    FrenchWorld();
    // drawNames();

}

public void paintComponent (Graphics g) {
    super.paintComponent(g);
    Graphics2D g2d = (Graphics2D) g;
    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
}

public void FrenchWorld(){

    names2=new String[16];
    names2[0]="Tomate";
    names2[1]="Chaise";
    names2[2]="Voiture";
    names2[3]="Ordinateur";
    names2[4]="Fleurs";
    names2[5]="Familles";
    names2[6]="Soeur";
    names2[7]="Epoux, Mari";
    names2[8]="Dieu";
    names2[9]="Livre";
    names2[10]="Montre, Regarder";
    names2[11]="Crayon";
    names2[12]="Bouteille";
    names2[13]="Carte,plan";
    names2[14]="Femmme";
    names2[15]="Sac";


}
public void drawNames(){
    for (int i=0; i<names2.length; i++){
        g2d.drawString(names2[i], 50, (1+i)*16);
    }
}
Image img;


public ImageImplement(Image img) {
    this.img = img;
    Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));
    setPreferredSize(size);
    setMinimumSize(size);
    setMaximumSize(size);
    setSize(size);
    setLayout(null);
}

public void paintComponent(Graphics g) {
    g.drawImage(img, 0, 0, null);
}
}

我的两个类用于使用JFame和imageArray设置ImageBu:ImageInFrame和ImageImplement

公共类ImageInJframe扩展了JFrame{

JFrame Frame;


Image[] pics;
String[] names = {"apple.jpg", "bags.jpg", "bathroom.jpg", "battled.jpg", "car.png",
        "chairs.jpg", "Computer.jpg", "family.jpg", "flowers.jpg", "god.jpg", "house.png", "map.jpg"
        , "men.jpg", "pencil.jpg", "sisters.jpg", "tomato.jpg", "watch.jpg", "women.jpg", "book.gif"};
final int NUM_PICS=names.length;
Graphics g;


public static void main(String args[])
{
    new ImageInJframe().start();
}


public void start()
{
    ImageImplement panel = new ImageImplement(new ImageIcon(String.valueOf(pics)).getImage());
    add(panel);
    setVisible(true);
    setSize(400,400);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setImage();
}

public void setImage() {


    pics = new Image[NUM_PICS];

}


public int indexOfImage(String userInput)
{
    for(int i=0;i<pics.length;i++)
    {
        if(userInput.equals(pics[i])){return i;}

    }
    return -1;
}

绘制是按需进行的,当调用
paintComponent
时,您需要重新绘制UI的当前状态。也许您应该从查看和了解有关绘制工作原理的更多细节开始

基本上,从
paintComponent
,您需要调用
draw
,但是您应该将传递给
paintComponent
方法的
Graphics
上下文传递给它。维护对未创建的
Graphics
上下文的引用是危险和不明智的

假设图像文件位于执行程序的当前目录中,那么它应该可以工作。如果它们与类文件一起包含在包中,那么您需要使用
class\getResource
获取对图像的引用,并将结果
URL
传递到
ImageIcon

您的
ImageImplement
面板什么也没做,所以即使它有一个合适的图像来显示,它也不会显示任何东西

String.valueOf(pics)
毫无意义

你已经发布了一大堆看起来不相关的代码,很难知道你指的是什么问题

这个

ImageLabel.setIcon((Icon) img);
毫无意义,
img
ImageInJFrame
的一个实例,它与
图标的关系如何


我完全不知道你想做什么

绘画是按需进行的,当调用你的
paintComponent
时,你需要重新绘制UI的当前状态。也许你应该先看一看,了解更多关于绘画工作原理的细节

基本上,从
paintComponent
,您需要调用
draw
,但是您应该将传递给
paintComponent
方法的
Graphics
上下文传递给它。维护对未创建的
Graphics
上下文的引用是危险和不明智的

假设图像文件位于执行程序的当前目录中,那么它应该可以工作。如果它们与类文件一起包含在包中,那么您需要使用
class\getResource
获取对图像的引用,并将结果
URL
传递到
ImageIcon

您的
ImageImplement
面板什么也没做,所以即使它有一个合适的图像来显示,它也不会显示任何东西

String.valueOf(pics)
毫无意义

你已经发布了一大堆看起来不相关的代码,很难知道你指的是什么问题

这个

ImageLabel.setIcon((Icon) img);
毫无意义,
img
ImageInJFrame
的一个实例,它与
图标的关系如何


我完全不知道你想做什么

请编辑你的帖子,包括对预期行为和你看到的内容的描述,以及根据需要进行的任何stacktracePainting,当调用你的
paintComponent
时,你需要重新绘制UI的当前状态。也许你应该先看一看有关绘画工作原理的详细信息,请使用代码和代码片段的代码格式、HTML/XML或输入/输出等结构化文档。要执行此操作,请选择文本并单击
{}
按钮位于消息发布/编辑表单顶部。2)为了更快地获得更好的帮助,请发布或。我想知道如何使用另一个类和和imageArray设置每个世界的图像。如果您忘记了imageImplemnt和ImageInFrame类,我如何使用有助于e要在点击JButton后在JField1中显示每个英文单词的图像,请编辑您的帖子,包括预期行为的描述和您看到的内容,以及任何stacktracePainting,当调用
paintComponent
时,您需要重新绘制UI的当前状态。可能您需要应该先看一看,并了解有关绘画工作原理的更多详细信息1)请对代码和代码片段、HTML/XML或输入/输出等结构化文档使用代码格式。要执行此操作,请选择文本并单击
{}
按钮位于消息发布/编辑表单顶部。2)为了更快地获得更好的帮助,请发布或。我想知道如何使用另一个类和和imageArray设置每个世界的图像。如果您忘记了imageImplemnt和ImageInFrame类,我如何使用有助于在点击JButton后,要使每个英文单词的图像出现在JField1中,这意味着我必须将ImageInFrame类更改为您编写的?我做了您向我展示的修改,但我不知道是否必须删除一个类?您知道我如何仅使用一个类来设置图像并删除ImageInFrame和imageimplement吗?你如何使用ImageArray进行扫描?真正的问题是为什么?为什么
ImageImplement panel = new ImageImplement(new ImageIcon(String.valueOf(pics)).getImage());
add(panel);
JLabel panel = new JLabel(new ImageIcon(names[0]).getImage());
add(panel);
ImageLabel.setIcon((Icon) img);