我试图创建JPanel与可拖动的十字架,鼠标点击后出现.一切正常,但当我调整JPanel的大小时,十字架消失了.我试图覆盖JPanel中的paintComponent方法,但是所有的十字都在坐标(0,0)处.我该如何解决?
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionAdapter;
import java.util.ArrayList;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class CrossPanel extends JPanel implements MouseListener {
private int orderOfCross = 0;
private ArrayList<Cross> crosses;
private int defaultSizeOfCrosses = 10;
CrossPanel() {
setOpaque(false);
addMouseListener(this);
crosses = new ArrayList<Cross>();
}
@Override
public void mouseClicked(MouseEvent e) {
int x = e.getX();
int y = e.getY();
Cross cross = new Cross(orderOfCross++, defaultSizeOfCrosses);
crosses.add(cross);
cross.setLocation(x - defaultSizeOfCrosses, y - defaultSizeOfCrosses);
add(cross);
repaint();
}
@Override …Run Code Online (Sandbox Code Playgroud) // 我的代码调用要放置在 JPanel 上的目录中的 n 个图像
public void imageAdder(int n, String name){
BufferedImage myPic = null;
for (int i = 0; i <= n; i++){
try {
myPic = ImageIO.read(new File("Images/" + name + i + ".jpg"));
} catch (Exception e){
System.out.println("no file man cmon");
}
JLabel picLabel = new JLabel(new ImageIcon(myPic));
// picLabel.setBounds(mouseX, mouseY, 100, 50);
// picLabel.addMouseMotionListener(this);
// picLabel.addMouseListener(this);
canvas.add(picLabel);
}}
Run Code Online (Sandbox Code Playgroud)
我阅读了类 DragSource 以及如何有一种方法可以拖动图像类型的东西,但我不确定这是否适用于我的代码。如果我想用鼠标自由拖动图像怎么办?
我正在尝试通过制作拼图程序来提高我对Java的理解,特别是Java GUI.目前,用户选择图像,该图像被切割成指定数量的片段.这些碎片被随机地绘制到屏幕上,但它们似乎被其他部分的空白部分覆盖,并不是所有部分都显示出来,但我可以打印出所有坐标.我使用绝对定位,因为LayoutManager似乎不起作用.我简单地试过了layeredPanes,但是他们让我困惑,似乎没有解决问题.我真的很感激一些帮助.
以下是2个相关课程:
import javax.swing.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
public class PuzzlePieceDriver extends JFrame
{
private static Dimension SCREENSIZE = Toolkit.getDefaultToolkit().getScreenSize();
private static final int HEIGHT = SCREENSIZE.height;
private static final int WIDTH = SCREENSIZE.width;
public static int MY_WIDTH;
public static int MY_HEIGHT;
private static BufferedImage image;
private int xPieces = PuzzleMagicDriver.getXPieces();
private int yPieces = PuzzleMagicDriver.getYPieces();
private PuzzlePiece[] puzzle = new PuzzlePiece[xPieces*yPieces];
public Container pane = this.getContentPane();
private JLayeredPane layeredPane = new JLayeredPane();
public PuzzlePieceDriver(ImageIcon myPuzzleImage)
{ …Run Code Online (Sandbox Code Playgroud) 我正在制作一个GUI组件来代表窗口中的棋盘.通常它将是一个8x8正方形的网格,虽然有些变体需要10x8板等.第一步是制作一个包含8x8组件网格的面板.
该类Board扩展JPanel并使用a GridLayout来模拟8x8组件的网格.为了完成某些事情,这些只是Square扩展的类JButton.麻烦的是他们不是正方形!
在Board已添加到新鲜实例化JFrame,包装和呈现在屏幕上.当然,现在电路板在用户调整大小时占用整个帧.网格与板一起缩放,这将方块扭曲成矩形.
这并非完全不受欢迎的行为.我希望电路板能够与框架一起扩展.但是,我想确保方块始终保持正方形.电路板可以是矩形(10x8),但应保持固定比例.
我如何获得正方形?
好的,所以我正在制作一个垄断游戏。到目前为止JFrame,我有一个,JPanel作为董事会。我已经加载了所有必要的图像。我创建了一个Player扩展的对象JLabel,代表棋盘上的玩家。
我正在尝试设置(希望在棋盘周围移动棋子)Player对象(即 a JLabel)在棋盘上(即 a JPanel)的位置。我尝试了.setLocation方法,.setBounds方法。
出于某种原因,无论我做什么,Player对象都只会出现在JPanel. 我想知道如何移动Player板上的物体。
JFrame代码(我尝试将 移动JLabel到构造函数的底部):
package com.Game.Monopoly;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.Timer;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.LayoutManager;
import java.awt.Point;
import java.awt.SystemColor;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.IOException;
import …Run Code Online (Sandbox Code Playgroud)