我正在创建一个代码,在那里我需要改变面板的颜色,当我通过它时,我仍然按在上面。例如,假设我按下一个绿色面板,然后拖动它到另一个面板上,这个面板应该是绿色的。然而,它并不是每次都起作用,就像有时它会改变颜色,但有时它不会。
import java.awt.Color;
import java.awt.Font;
import java.awt.event.MouseEvent;
import java.util.Random;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Random;
import javax.swing.*;
import javax.swing.event.MouseInputListener;
public class Etabli extends JFrame {
JPanel paneprinci;
CarrePanel selected;
public Etabli() {
this.setVisible(true);
setTitle("Cadre");
setDefaultCloseOperation(EXIT_ON_CLOSE);
paneprinci=new JPanel(null);
setSize(600,600);
selected=new CarrePanel();
for (int i=0;i<10;i++) {
paneprinci.add(new CarrePanel(new Carre()));
}
this.getContentPane().add(paneprinci);
}
public static void main (String[]args) {
javax.swing.SwingUtilities.invokeLater(
new Runnable() {
public void run() {
Etabli e=new Etabli();
}
});
}
public class CarrePanel extends JPanel implements MouseInputListener{
private Carre carre;
private boolean etat;
private int xprev;
private int yprev;
public CarrePanel(Carre c) {
setBounds(new Random().nextInt(500),new Random().nextInt(500), 50, 50);
addMouseListener(this);
addMouseMotionListener(this);
this.setBackground(c.getColor());
this.carre=c;
}
public CarrePanel() {
setBounds(new Random().nextInt(500),new Random().nextInt(500), 50, 50);
addMouseListener(this);
addMouseMotionListener(this);
}
public void setCarre(Carre c) {
carre=c;
}
public Carre getCarre() {
return carre;
}
@Override
public void mouseClicked(MouseEvent e) {
System.out.println(this.carre.getColor());
}
@Override
public void mouseEntered(MouseEvent e) {
if (selected.getCarre()!=null) {
this.carre.setColor(selected.getCarre().getColor());
this.setBackground(selected.getCarre().getColor());
}
}
@Override
public void mousePressed(MouseEvent e) {
etat=true;
selected.setCarre(this.carre);
xprev=e.getXOnScreen();
yprev=e.getYOnScreen();
}
@Override
public void mouseReleased(MouseEvent e) {
etat=false;
if(selected.getCarre()==this.carre) {
selected.setCarre(null);;
}
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mouseDragged(MouseEvent e) {
if(etat) {
int x=this.getX()+e.getXOnScreen()-xprev;
int y=this.getY()+e.getYOnScreen()-yprev;
this.setLocation(x,y);
xprev=e.getXOnScreen();
yprev=e.getYOnScreen();
}
}
@Override
public void mouseMoved(MouseEvent e) {
}
}
}
这是Carre的代码(法语为正方形)
import java.awt.Color;
import java.util.Arrays;
import java.util.Random;
import java.awt.Color;
public class Carre {
private Color color;
public Carre() {
color=new Color(new Random().nextInt(255),new Random().nextInt(255),new Random().nextInt(255));
}
public Color getColor() {
return color;
}
public void setColor(Color c) {
color=c;
}
}
我不明白的是为什么它有时会起作用,我不知道问题是否来自我如何做我的拖拽事件,或者是其他地方出了问题。
谢谢你的雨篷。
我不明白的是为什么它有时会起作用,
当您将一个正方形拖到另一个正方形时,您会注意到有时拖动的正方形会被绘制:
当方块画为上面
另一个方块时,不会生成mouseEntered事件,因为默认逻辑将只为顶部组件生成事件。
当方块画在另一个方块的下方时,您的mouseEntert事件就会生成,您的逻辑就会按照预期工作。
组件的涂装顺序由其Zorder决定。因此您可以调整拖动组件的ZOrder为最后绘制的组件。这将确保拖动的组件总是画在其他组件的下方处
。
在mousePressed逻辑中,可以添加:
JPanel parent = (JPanel)getParent();
parent.setComponentZOrder(this, parent.getComponentCount() - 1);
在我的程序中,我有一个基于向导的布局。由CardLayout实现。因此,有一组类扩展了JPanel。我想在每个面板上都有按钮来导航到其他面板。例如,当程序显示第一面板时,我想有一个按钮来显示第二面板。 我试图在main cardlayout panel holder中创建一个方法,以便任何其他类都可以通过该方法更改显示面板,但它不起作用,并且出现了stackoverflow错误。 这是我的课程 基
问题内容: 我用Google搜索了很多东西,但没有找到解决方案。我认为应该有Java大师来帮助我… 这是我的初始化方法: 这是JPanel另一个步骤0的方法: 完全没有任何回应,我尝试过重新验证,重新粉刷和其他工作人员…不起作用…任何人在这里都可以得到意见! 问题答案: 这就是将正确的方法和常量String暴露给外界,以允许类交换视图本身。例如,给您的第一堂课一个私有的CardLayout字段,称
问题内容: 我创建了一个框架,然后在其中创建了面板。我已经将图像放置在一个 面板中,现在我需要将该图像拖动到另一个面板中。我该怎么做。 请作为初学者逐步说明。 问题答案: 使用纯Java的快速示例DragGestureListener,DropTargetAdapter并 TransferHandler为一个面板上的图像对另一面板的DnD支持: 选择绿色形状并将其拖动到上方的空白面板后:
问题内容: 我有一个非常基本的模板(basic_template.html),并希望使用使用另一部分模板格式化的数据来填写。basic_template.html可能包含使用部分模板格式化的几件事。 我应该如何在views.py中构建代码? 我这样做的原因是稍后将使用Ajax填充。我这样做对吗? 问题答案: 你可以做: 另一个Django模板在哪里。在这里,你可以放入将用Ajax获得的HTML。
一、简介 “我的面板"用于显示和管理用户个人信息,是当你登陆系统时默认显示的页面。 二、功能演示 修改个人信息 修改密码
问题内容: 我有一个程序,其中有一个按钮可以将背景色更改为红色,而另一个按钮可以将背景色设置为默认。 如何获取面板的默认颜色? 问题答案: 将默认颜色存储到构造函数中的变量中,或在使用其他按钮更改颜色之前将其存储,即: 并在您的默认颜色按钮中: