Java 我能';不要在鼠标侦听器组件上绘图
我现在不能发布任何代码,因为我正在编程的计算机没有互联网连接,我绝对拒绝在这个手机上写出来 基本上,我有一个Java 我能';不要在鼠标侦听器组件上绘图,java,swing,components,graphics2d,mouselistener,Java,Swing,Components,Graphics2d,Mouselistener,我现在不能发布任何代码,因为我正在编程的计算机没有互联网连接,我绝对拒绝在这个手机上写出来 基本上,我有一个JPanel(它实现了mouseListener),它的contentPane中包含一个组件。JPanel正在侦听组件上的鼠标事件 当我绘制面板时,除了组件下的区域(可见但不绘制任何内容)仅显示面板的背景(标准颜色填充)而不是我在其上绘制的图像外,它工作正常 我觉得我错过了一些与鼠标听写器有关的基本信息 好了,这是全班同学,现在我的电脑又正常工作了: (另外,我似乎使用的是标签,而不是组件
JPanel
(它实现了mouseListener),它的contentPane中包含一个组件。JPanel
正在侦听组件上的鼠标事件
当我绘制面板时,除了组件
下的区域(可见但不绘制任何内容)仅显示面板的背景(标准颜色填充)而不是我在其上绘制的图像外,它工作正常
我觉得我错过了一些与鼠标听写器有关的基本信息
好了,这是全班同学,现在我的电脑又正常工作了:
(另外,我似乎使用的是标签,而不是组件。对此表示抱歉。)
import java.awt.*;
导入java.awt.*;
导入javax.swing.*;
导入java.io.*;
导入javax.imageio.*;
导入java.awt.event.MouseListener;
导入java.awt.event.MouseEvent;
导入java.awt.event.ComponentListener;
导入java.awt.event.ComponentEvent;
导入java.util.*;
公共类PictureViewer扩展容器实现MouseListener、ComponentListener
{
java.util.List图像;
公共组件左侧、右侧;
int-currentImage;
布尔左鼠标,右鼠标;
布尔mouseDown;
图像左选项卡、右选项卡、noImage;
公共图片浏览者()
{
setVisible(真);
挫折背景(颜色:蓝色);
addComponentListener(此);
images=newarraylist();
leftSide=新标签();
设置位置(0,0);
leftSide.setSize(getWidth()/2,getHeight());
左侧。addMouseListener(此);
添加(左侧);
右侧=新标签();
setLocation(getWidth()/2,0);
右侧.setSize(getWidth()/2,getHeight());
右侧。addMouseListener(此);
右侧。设置可见(假);
添加(右侧);
noImage=Toolkit.getDefaultToolkit().getImage(getClass().getResource(“Images/No Picture.png”);
leftTab=Toolkit.getDefaultToolkit().getImage(getClass().getResource(“Images/Left Tab.png”);
rightTab=Toolkit.getDefaultToolkit().getImage(getClass().getResource(“Images/Right Tab.png”);
}
公共无效添加图像(图像)
{
图片。添加(图片);
}
公共空间清除()
{
图像。清除();
}
公共空间涂料(图g)
{
超级油漆(g);
Graphics2D g2d=(Graphics2D)g;
图像绘制;
如果(images.size()>0)
{
imageToDraw=images.get(当前图像);
}
其他的
{
imageToDraw=无图像;
}
g2d.drawImage(imageToDraw、getX()、getY()、getWidth()、getHeight()、0、0、imageToDraw.getWidth(此)、imageToDraw.getHeight(此)、此);
绘制(新矩形(0,0,20,20));
如果(鼠标左键)
{
g2d.drawImage(leftTab,getX()+8,getY()+(int)(getSize().getHeight()-leftTab.getHeight(this)/2),this);
}
}
public void componentHidden(ComponentEvent e){}
显示的公共无效组件(组件事件e){}
公共无效组件已移动(组件事件e)
{
成分弹性化(e);
}
公共无效组件已恢复(组件事件e)
{
setLocation(getLocation());
leftSide.setSize(getWidth()/2,getHeight());
setLocation((int)(getLocation().getX()+(getWidth()/2)),(int)getLocation().getY());
rightSide.setSize(leftSide.getSize());
System.out.println(getSize());
重新油漆();
}
公共无效MouseEvent e{}
公共无效mouseClicked(MouseEvent e){}
public void mousePressed(MouseEvent e){}
公共无效鼠标事件(鼠标事件e)
{
如果(例如getComponent()==左侧){
leftMoused=true;
System.out.println(“左”);}
否则{
rightMoused=true;
System.out.println(“右”);}
重新油漆();
}
公共无效mouseExited(MouseEvent e)
{
如果(例如getComponent()==左侧)
leftMoused=false;
其他的
rightMoused=false;
重新油漆();
}
}
组件还有一个paintComponent
方法,默认情况下,该方法将绘制容器的背景。您需要重写该方法,setOpaque
为false(取决于组件),或者其他方法来防止绘制
但是,听起来您真正想要的是将鼠标侦听器添加到面板,并让它侦听定义的边界,而不是面板,而不是向面板添加组件
我现在不能发布任何代码
您编写了无法工作的自定义代码,您希望我们猜测该代码是什么样子?我们没有时间去猜测你可能犯了什么错误。论坛的目的是让我们更容易回答这个问题,这意味着您需要提供我们帮助解决问题所需的所有信息
这就是为什么您需要提供一个示例来说明问题。或者您缺少在JPanelOoh上绘图的基本功能,这听起来很有趣。您是否有任何链接可以解释如何设置定义的边界?来自鼠标侦听器的MouseEvent将具有鼠标的x和y位置。你可以用它来确定它是否在一个特定的矩形或其他形状内。但这样就可以确定它何时进入或退出JPanel中的区域了吗?你可以用MouseMotionListener跟踪它的运动,并确定它何时离开或进入。我一直在试图避免它,因为有一个稍微优雅的解决方案,但似乎没有。我会把它放进去的,希望不会再有问题了。我问过莫
import java.awt.*;
import java.awt.*;
import javax.swing.*;
import java.io.*;
import javax.imageio.*;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import java.awt.event.ComponentListener;
import java.awt.event.ComponentEvent;
import java.util.*;
public class PictureViewer extends Container implements MouseListener, ComponentListener
{
java.util.List<Image> images;
public Component leftSide, rightSide;
int currentImage;
boolean leftMoused, rightMoused;
boolean mouseDown;
Image leftTab, rightTab, noImage;
public PictureViewer()
{
setVisible(true);
setBackground(Color.BLUE);
addComponentListener(this);
images = new ArrayList<Image>();
leftSide = new Label();
leftSide.setLocation(0, 0);
leftSide.setSize(getWidth() / 2, getHeight());
leftSide.addMouseListener(this);
add(leftSide);
rightSide = new Label();
rightSide.setLocation(getWidth() / 2, 0);
rightSide.setSize(getWidth() / 2, getHeight());
rightSide.addMouseListener(this);
rightSide.setVisible(false);
add(rightSide);
noImage = Toolkit.getDefaultToolkit().getImage(getClass().getResource("Images/No Picture.png"));
leftTab = Toolkit.getDefaultToolkit().getImage(getClass().getResource("Images/Left Tab.png"));
rightTab = Toolkit.getDefaultToolkit().getImage(getClass().getResource("Images/Right Tab.png"));
}
public void addImage(Image image)
{
images.add(image);
}
public void clear()
{
images.clear();
}
public void paint(Graphics g)
{
super.paint(g);
Graphics2D g2d = (Graphics2D)g;
Image imageToDraw;
if (images.size() > 0)
{
imageToDraw = images.get(currentImage);
}
else
{
imageToDraw = noImage;
}
g2d.drawImage(imageToDraw, getX(), getY(), getWidth(), getHeight(), 0, 0, imageToDraw.getWidth(this), imageToDraw.getHeight(this), this);
g2d.draw(new Rectangle(0, 0, 20, 20));
if (leftMoused)
{
g2d.drawImage(leftTab, getX() + 8, getY() + (int)(getSize().getHeight() - leftTab.getHeight(this) / 2), this);
}
}
public void componentHidden(ComponentEvent e){}
public void componentShown(ComponentEvent e){}
public void componentMoved(ComponentEvent e)
{
componentResized(e);
}
public void componentResized(ComponentEvent e)
{
leftSide.setLocation(getLocation());
leftSide.setSize(getWidth() / 2, getHeight());
rightSide.setLocation((int)(getLocation().getX() + (getWidth() / 2)), (int)getLocation().getY());
rightSide.setSize(leftSide.getSize());
System.out.println(getSize());
repaint();
}
public void mouseReleased(MouseEvent e){}
public void mouseClicked(MouseEvent e){}
public void mousePressed(MouseEvent e){}
public void mouseEntered(MouseEvent e)
{
if (e.getComponent() == leftSide){
leftMoused = true;
System.out.println("Left");}
else {
rightMoused = true;
System.out.println("Right");}
repaint();
}
public void mouseExited(MouseEvent e)
{
if (e.getComponent() == leftSide)
leftMoused = false;
else
rightMoused = false;
repaint();
}
}