Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在JPanel上添加JLabel_Java_Image_Swing_Jpanel_Jlabel - Fatal编程技术网

Java 在JPanel上添加JLabel

Java 在JPanel上添加JLabel,java,image,swing,jpanel,jlabel,Java,Image,Swing,Jpanel,Jlabel,我试图在JPanel上放置一个.jpg图标,以便在一块板上表示一块板。我有一个包含.java文件的GUI文件夹和另一个包含.jpg文件的文件夹 --主要编辑-- 示例代码 当一个正方形被点击时,一个白色的图标将被放置,然后是黑色等等。这是一个我试图实现的非常基本的例子 import java.awt.Dimension; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class gui ext

我试图在JPanel上放置一个.jpg图标,以便在一块板上表示一块板。我有一个包含.java文件的GUI文件夹和另一个包含.jpg文件的文件夹

--主要编辑-- 示例代码

当一个正方形被点击时,一个白色的图标将被放置,然后是黑色等等。这是一个我试图实现的非常基本的例子

import java.awt.Dimension;

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

public class gui extends JFrame implements MouseListener {

/**
 * 
 */
private static final long serialVersionUID = -973341728129968945L;
JLayeredPane layeredPane;
JPanel board;
JLabel piece;
int numSquares;
private boolean currentPlayer;

public gui(){

    Dimension boardSize = new Dimension(600, 600);

    numSquares = 6;
    currentPlayer = true;

    layeredPane = new JLayeredPane();
    getContentPane().add(layeredPane);
    layeredPane.setPreferredSize(boardSize);
    layeredPane.addMouseListener(this);

    board = new JPanel();
    layeredPane.add(board, JLayeredPane.DEFAULT_LAYER);

    board.setLayout( new GridLayout(numSquares, numSquares) );
    board.setPreferredSize( boardSize );
    board.setBounds(0, 0, boardSize.width, boardSize.height);

    for (int i = 0; i < (numSquares * numSquares); i++) {
        JPanel square = new JPanel( new BorderLayout() );
        square.setBorder(BorderFactory.createLineBorder(Color.black));
        square.setBackground(Color.green);
        board.add( square );


     }



}

public static void main(String[] args) {
        JFrame frame = new gui();
        frame.setDefaultCloseOperation(DISPOSE_ON_CLOSE );
        frame.pack();
        frame.setResizable(true);
        frame.setLocationRelativeTo( null );
        frame.setVisible(true);
     }



@Override
public void mouseClicked(MouseEvent e) {
    JPanel temp =  (JPanel)board.findComponentAt(e.getX(), e.getY());
    System.out.println(e.getX() + " " + e.getY());

    if( currentPlayer ){
        ImageIcon white = new ImageIcon("l/Images/white.jpg");
        piece = new JLabel(white);
        temp.add(piece);
    }
    else{   
        ImageIcon black = new ImageIcon( "/Images/black.jpg");
        piece = new JLabel(black);
        temp.add(piece);
    }
    currentPlayer = !currentPlayer;


}


@Override
public void mouseEntered(MouseEvent e) {


}

@Override
public void mouseExited(MouseEvent arg0) {
    // TODO Auto-generated method stub

}

@Override
public void mousePressed(MouseEvent arg0) {
    // TODO Auto-generated method stub

}

@Override
public void mouseReleased(MouseEvent e) {

}




}
导入java.awt.Dimension;
导入javax.swing.*;
导入java.awt.*;
导入java.awt.event.*;
公共类gui扩展JFrame实现MouseListener{
/**
* 
*/
私有静态最终长serialVersionUID=-973341728129968945L;
JLayeredPane layeredPane;
JPanel董事会;
JLabel块;
整数平方;
私人布尔播放器;
公共图形用户界面(){
尺寸板尺寸=新尺寸(600600);
numSquares=6;
currentPlayer=true;
layeredPane=新的JLayeredPane();
getContentPane().add(layeredPane);
layeredPane.setPreferredSize(boardSize);
layeredPane.addMouseListener(此);
board=新JPanel();
layeredPane.add(board,JLayeredPane.DEFAULT_LAYER);
board.setLayout(新网格布局(numSquares,numSquares));
board.setPreferredSize(boardSize);
board.setBounds(0,0,boardSize.width,boardSize.height);
对于(int i=0;i<(numSquares*numSquares);i++){
JPanel square=newjpanel(newborderlayout());
square.setboorder(BorderFactory.createLineBorder(Color.black));
正方形。背景(颜色。绿色);
板。添加(方形);
}
}
公共静态void main(字符串[]args){
JFrame=newgui();
frame.setDefaultCloseOperation(在关闭时处理);
frame.pack();
frame.setresizeable(true);
frame.setLocationRelativeTo(空);
frame.setVisible(true);
}
@凌驾
公共无效mouseClicked(MouseEvent e){
JPanel temp=(JPanel)board.findComponentAt(e.getX(),e.getY());
System.out.println(e.getX()+“”+e.getY());
如果(当前播放器){
ImageIcon白色=新的ImageIcon(“l/Images/white.jpg”);
工件=新的JLabel(白色);
温度添加(件);
}
否则{
ImageIcon black=新的ImageIcon(“/Images/black.jpg”);
工件=新的JLabel(黑色);
温度添加(件);
}
currentPlayer=!currentPlayer;
}
@凌驾
公共无效鼠标事件(鼠标事件e){
}
@凌驾
public void mouseexitted(MouseEvent arg0){
//TODO自动生成的方法存根
}
@凌驾
public void mousePressed(MouseEvent arg0){
//TODO自动生成的方法存根
}
@凌驾
公共无效MouseEvent(MouseEvent e){
}
}

如果从容器中添加或删除组件,不要忘记重新验证和重新喷漆。我已经修改了你的SSCE,不再需要使用图像来让那些无法访问你的图像文件的人(比如我!)运行它。更改由
/!!标记注释:

import java.awt.Color;
import java.awt.Dimension;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;

public class Gui2 extends JFrame implements MouseListener {

   private static final long serialVersionUID = -973341728129968945L;
   JLayeredPane layeredPane;
   JPanel board;
   JLabel piece;
   int numSquares;
   private boolean currentPlayer;

   // !!
   private ImageIcon whiteIcon;
   private ImageIcon blackIcon;

   public Gui2() {
      // !!
      whiteIcon = createIcon(Color.white);
      blackIcon = createIcon(Color.black);

      Dimension boardSize = new Dimension(600, 600);

      numSquares = 6;
      currentPlayer = true;

      layeredPane = new JLayeredPane();
      getContentPane().add(layeredPane);
      layeredPane.setPreferredSize(boardSize);
      layeredPane.addMouseListener(this);

      board = new JPanel();
      layeredPane.add(board, JLayeredPane.DEFAULT_LAYER);

      board.setLayout(new GridLayout(numSquares, numSquares));
      board.setPreferredSize(boardSize);
      board.setBounds(0, 0, boardSize.width, boardSize.height);

      for (int i = 0; i < (numSquares * numSquares); i++) {
         // !! JPanel square = new JPanel(new BorderLayout());
         JPanel square = new JPanel(new GridBagLayout()); // !!

         square.setBorder(BorderFactory.createLineBorder(Color.black));
         square.setBackground(Color.green);
         square.setName(String.format("[%d, %d]", i % numSquares, i
               / numSquares)); // !!
         board.add(square);

      }

   }

   // !!
   private ImageIcon createIcon(Color color) {
      int width = 40;
      int height = width;
      BufferedImage img = new BufferedImage(width, height,
            BufferedImage.TYPE_INT_ARGB);
      Graphics2D g2 = img.createGraphics();
      g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
            RenderingHints.VALUE_ANTIALIAS_ON);
      g2.setColor(color);
      g2.fillOval(0, 0, width, height);
      g2.dispose();
      ImageIcon icon = new ImageIcon(img);
      return icon;
   }

   public static void main(String[] args) {
      JFrame frame = new Gui2();
      frame.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
      frame.pack();
      frame.setResizable(true);
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }

   @Override
   // !!
   public void mousePressed(MouseEvent e) {
      JPanel temp = (JPanel) board.findComponentAt(e.getX(), e.getY());
      System.out.println(e.getX() + " " + e.getY());
      System.out.println(temp.getName()); // !!

      if (currentPlayer) {
         // !! ImageIcon white = new ImageIcon("l/Images/white.jpg");
         // !! piece = new JLabel(white);
         piece = new JLabel(whiteIcon); // !!
         temp.add(piece);
      } else {
         // !! ImageIcon black = new ImageIcon("/Images/black.jpg");
         // !! piece = new JLabel(black);
         piece = new JLabel(blackIcon); // !!
         temp.add(piece);
      }
      temp.revalidate(); // !!
      temp.repaint(); // !!
      currentPlayer = !currentPlayer;

   }

   @Override
   public void mouseEntered(MouseEvent e) {

   }

   @Override
   public void mouseExited(MouseEvent arg0) {
   }

   @Override
   public void mouseClicked(MouseEvent arg0) {
   }

   @Override
   public void mouseReleased(MouseEvent e) {

   }

}
导入java.awt.Color;
导入java.awt.Dimension;
导入javax.swing.*;
导入java.awt.*;
导入java.awt.event.*;
导入java.awt.image.buffereImage;
公共类GUI 2扩展了JFrame实现MouseListener{
私有静态最终长serialVersionUID=-973341728129968945L;
JLayeredPane layeredPane;
JPanel董事会;
JLabel块;
整数平方;
私人布尔播放器;
// !!
私人图像图标白色图标;
私人图像图标黑图标;
公共GUI 2(){
// !!
whiteIcon=createIcon(Color.white);
blackIcon=createIcon(Color.black);
尺寸板尺寸=新尺寸(600600);
numSquares=6;
currentPlayer=true;
layeredPane=新的JLayeredPane();
getContentPane().add(layeredPane);
layeredPane.setPreferredSize(boardSize);
layeredPane.addMouseListener(此);
board=新JPanel();
layeredPane.add(board,JLayeredPane.DEFAULT_LAYER);
board.setLayout(新网格布局(numSquares,numSquares));
board.setPreferredSize(boardSize);
board.setBounds(0,0,boardSize.width,boardSize.height);
对于(int i=0;i<(numSquares*numSquares);i++){
//!!JPanel square=新的JPanel(新的BorderLayout());
JPanel square=新的JPanel(新的GridBagLayout());/!!
square.setboorder(BorderFactory.createLineBorder(Color.black));
正方形。背景(颜色。绿色);
square.setName(String.format(“[%d,%d]”),i%numSquares,i
/numSquares);/!!
板。添加(方形);
}
}
// !!
private ImageIcon createIcon(彩色){
整数宽度=40;
整数高度=宽度;
BuffereImage img=新的BuffereImage(宽度、高度、,
BuffereImage.TYPE_INT_ARGB);
Graphics2D g2=img.createGraphics();
g2.setRenderingHint(RenderingHints.KEY_抗锯齿,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.设置颜色(颜色);
g2.圆角(0,0,宽度,高度);
g2.dispose();
ImageIcon图标=新的ImageIcon(img);
返回图标;
}
公共静态void main(字符串[]args){
JFrame=newgui2();
frame.setDefaultCloseOperation(在关闭时处理);
frame.pack();
frame.setresizeable(true);
frame.setLocationRelativeTo(空);
frame.setVisible(true);
}
@凌驾
// !!
公共无效鼠标按下(MouseEvent e){
JPanel temp=(JPanel)board.findComponentAt(e.getX(),e.getY());
System.out.println(e.getX()+“”+e.getY());
System.out.println(temp.getName());/!!
如果(当前播放器){
//!!ImageIcon白色=新的ImageIcon(“l/Images/white.jpg”);
//!!工件=新的JLabel(白色);
工件=新的JLabel(白色图标);/!!
温度添加(件);
}否则{
//!!ImageIcon black=新的ImageIcon(“/Images/black.jpg”);
//!!工件=新的JLabel(黑色);
工件=新的JLabel(黑色图标);/!!
温度添加(件);
}
温度重新验证();/!!
临时重新喷漆();/!!
电流