Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.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 我能';不要在鼠标侦听器组件上绘图_Java_Swing_Components_Graphics2d_Mouselistener - Fatal编程技术网

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();
    }   


}