Я не могу опубликовать какой-либо код прямо сейчас, так как компьютер, на котором я программирую, не имеет подключения к интернету, и я абсолютно отказываюсь записывать его на этом телефоне.
По сути, у меня есть JPanel
(который реализует mouseListener), который содержит Component
в своей панели содержимого.JPanel
прослушивает события мыши на Component
.
Когда я рисую на панели, она работает нормально, за исключением того, что область под Component
(которая видна, но ничего не рисует) простопоказывает фон панели (стандартная цветная заливка), а не изображение, которое я нарисовал поверх него.
У меня такое ощущение, что мне не хватает чего-то фундаментального, что связано с mouseListeners ...
Ладно, вот и весь класс, теперь, когда мой компьютер снова работает как задумано:
(Кроме того, похоже, что я использовал Метки, а не Компоненты. Извините.)
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();
}
}