当前位置: 首页 > 知识库问答 >
问题:

无法在Java中获取图像以显示在图像面板中

董元徽
2023-03-14
/*
* To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package projectone;

import java.util.Arrays;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

/**
 *
 * @author Geoff
 */
public class CardDealer extends JFrame {

   private JPanel imagePanel;     // To hold the label
   private JPanel buttonPanel;    // To hold a button
   private JLabel imageLabelOne, imageLabelTwo, imageLabelThree, 
   imageLabelFour, imageLabelFive;     // To show an image
   private JButton button;        // To get an image
   public static Object[] theHand; //five cards hand


public static void main(String[] args) 
{






   LinkedStack theDeck = new LinkedStack();

   theDeck = theDeck.theCards();





    System.out.println("List print test\n");
    System.out.println(theDeck.toString());


    theDeck.shuffle(theDeck);
    System.out.println("List shuffle print test\n");
    System.out.println(theDeck.toString());

    Object[] hand =
    {
    theDeck.pop(),
    theDeck.pop(),
    theDeck.pop(),
    theDeck.pop(),
    theDeck.pop(),       
    };


    System.out.println("Hand print test\n");
    System.out.println(Arrays.toString(hand));

    theHand = hand;

   new CardDealer();
   }
   /**
  Constructor
   */

   public CardDealer()
   {
  // Set the title.
  setTitle("Card Dealer");

  // Specify an action for the close button.
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  // Create a BorderLayout manager.
  setLayout(new BorderLayout());
  setPreferredSize(new Dimension(600, 400));

  // Build the panels.
  buildImagePanel();
  buildButtonPanel();

  // Add the panels to the content pane.
  add(imagePanel);
  add(buttonPanel);

  // Pack and display the window.
  pack();
  setVisible(true);
}

/**
  The buildImagePanel method adds a label to a panel.
*/

private void buildImagePanel()
{
   // Create a panel.
   imagePanel = new JPanel();
   imagePanel.setPreferredSize(new Dimension(600, 400));
   imagePanel.setLayout(new GridLayout(2, 5));

  // Create a label.
  imageLabelOne = new JLabel();
  imageLabelTwo = new JLabel();
  imageLabelThree = new JLabel();
  imageLabelFour = new JLabel();
  imageLabelFive = new JLabel();

  // Add the label to the panel.
  imagePanel.add(imageLabelOne);
  imagePanel.add(imageLabelTwo);
  imagePanel.add(imageLabelThree);
  imagePanel.add(imageLabelFour);
  imagePanel.add(imageLabelFive);
}

/**
  The buildButtonPanel method adds a button
  to a panel.
*/

private void buildButtonPanel()
{

  // Create a panel.
  buttonPanel = new JPanel();


  // Create a button.
  button = new JButton("Deal");



  // Register an action listener with the button.
  button.addActionListener(new ButtonListener());

  // Add the button to the panel.
  buttonPanel.add(button);
}

/**
  Private inner class that handles the event when
  the user clicks the button.
*/

private class ButtonListener implements ActionListener
{
  public void actionPerformed(ActionEvent e)
  {
     // Read the image file into an ImageIcon object.
      ImageIcon card1, card2, card3, card4, card5;
       card1 = new ImageIcon(theHand[0].toString() + ".jpg");
       card2 = new ImageIcon(theHand[1].toString() + ".jpg");
       card3 = new ImageIcon(theHand[2].toString() + ".jpg");
       card4 = new ImageIcon(theHand[3].toString() + ".jpg");
       card5 = new ImageIcon(theHand[4].toString() + ".jpg");

     // Display the image in the label.
     imageLabelOne.setIcon(card1);
     imageLabelTwo.setIcon(card2);
     imageLabelThree.setIcon(card3);
     imageLabelFour.setIcon(card4);
     imageLabelFive.setIcon(card5);



     // Pack the frame again to accomodate the 
     // new size of the label.
     pack();
  }
 }



}

共有1个答案

魏勇军
2023-03-14

您正在添加到边框布局。因此您必须指定边框布局的位置,您希望添加组件。默认情况下,它会添加到中心。同样,您不能在同一位置添加2个或更多组件。

所以在你的代码中,问题是你没有指定位置,你在中心添加了2个组件。

要解决这个问题,请指定如下所示的位置

add(imagePanel); // same as `BorderLayout.CENTER` (default)
add(buttonPanel,BorderLayout.NORTH);
 类似资料:
  • 我想显示图像,但不知道该怎么做。我不知道是必须安装一些库文件,还是简单地安装就可以了。实际上我想做图像处理,但首先我必须接受图像输入并显示图像,然后我可以得到图像处理的效果作为输出,并决定它(算法)是否正确。我只安装了eclipse。我也在谷歌上搜索过,但是无论他们建议什么都不管用。要么我得装点什么,要么不装。 我已经尝试了以下代码: 它只是显示一个图形窗口,但不能显示图像“bishnu.jpg”

  • 它将我带到图库以选择图像,但未显示在应用程序中,当单击上传按钮时,它只是一个空白图像视图 < li >我的Java代码 < li>XML代码 运行时显示此错误 java.lang.IllegalArgumentException:uri不能为空 以下两处给出错误的行显示了uri错误

  • 但是宽度和高度较低的图像成功地加载到图像视图中! 有人能告诉我代码有什么问题吗?我做错了什么?我只想从库中导入相机图像,并在图像视图中显示它们!

  • Mac OSX Netbeans JAVA 目标:21点程序…我正在尝试将扑克牌的图像图标显示在JLabel中 逻辑:我创建了一些CARD对象,用一个方法返回与之相关的imageIcon。在我的主GUI类中,如果我创建新的imageIcon来指定文件位置,它就会工作 注释掉的行工作正常,显示imageIcon图像,但是当我使用card1.getImage()方法时,图像不显示。方法很简单- 此外,

  • 问题内容: 我像这样设置静态文件的文件夹 在模板中,我使用img标签显示存储在/ tmp中的图像: 在firebug中,我看到404错误而不是图像。请告诉我我做错了什么? 提前致谢。 问题答案: 我不确定你正在使用什么配置项目。你在哪里找到它? 实际上,类构造函数有两个参数来控制静态文件的配置: static_folder:默认为“静态”。这是你必须在URL中使用的前缀才能访问静态文件。 stat

  • 现在真的需要你的帮助 我有一些检测结果。 我希望在这个未旋转的图像上显示这个结果(请忽略蓝色框) 我的算法逻辑如下: 假设黄色框的坐标是参考参照系(图像1的左上角),我试图找到黄色框相对于图像1内部图像左上角参照系的坐标。 所以我使用了基本的trigno(图片1右下角的直角三角形,来获得内部图片左上角的坐标,并根据这个点找到黄色方框的坐标。 在这之后,由于我想在图像2上显示结果,我使用了内部图像的