当前位置: 首页 > 面试题库 >

我如何创建一个包含两个图像的JPanel,而鼠标悬停在其中却只显示下面一个图像的一部分?

龙逸清
2023-03-14
问题内容

我正在尝试创建一个按钮面板,使单击的按钮变成“不同颜色”。即显示背景图像。ps我只需要这种方法(带有2张图像),不需要其他任何东西。谢谢 !

例如:

public class TestPane extends JPanel {

        private BufferedImage   imgUnclicked;
        private BufferedImage   imgClicked;
        private Point           mousePoint;

        public TestPane() {
            try {
                imgUnclicked = ImageIO.read(new File("C:\\Users\\Me\\Desktop\\tmp\\Uncolored.png"));
                imgClicked = ImageIO.read(new File("C:\\Users\\Me\\Desktop\\tmp\\Colored.png"));
            } catch (IOException ex) {
                Logger.getLogger(Spotlight.class.getName()).log(Level.SEVERE, null, ex);
            }

            addMouseMotionListener(new MouseAdapter() {
                @Override
                public void mouseClicked(MouseEvent e) {
                    mousePoint = e.getPoint();
                    repaint();
                }
            });
        }
    }
    @Override
    protected void paintComponent(Graphics g) {
        //Draw imgClicked
        //Draw imgUnclicked with some rectangular area around mouse click subtracted
    }
}

问题答案:

无需重新发明轮子。而是使用JToggleButton(适当配置)。一个按钮将同时响应鼠标 键盘输入。

import java.awt.*;
import java.net.*;
import javax.imageio.ImageIO;
import javax.swing.*;

class ChangeImageOnClick {

    public static void main(String[] args) throws Exception {
        URL url1 = new URL("http://i.stack.imgur.com/gJmeJ.png");
        final Image img1 = ImageIO.read(url1);
        URL url2 = new URL("http://i.stack.imgur.com/wCF8S.png");
        final Image img2 = ImageIO.read(url2);
        Runnable r = new Runnable() {

            @Override
            public void run() {
                JToggleButton btn = new JToggleButton("Click me!");
                btn.setIcon(new ImageIcon(img1));
                btn.setSelectedIcon(new ImageIcon(img2));

                btn.setContentAreaFilled(false);
                btn.setBorderPainted(false);

                JOptionPane.showMessageDialog(null, btn);
            }
        };
        SwingUtilities.invokeLater(r);
    }
}


 类似资料:
  • 我正在使用Material-用户界面-Next,并试图以一种非常特殊的方式创建图像。 我有一些相当奇怪的问题。 1-3出现在1下面 2-2和3不会填满它们的整个空间(当突出显示时,无论图像如何,只有一半的内容空间被利用) 3-有时我会得到类似以下的东西: 为了便于参考,如果您遵循此链接,那么您将转到物料ui下一个GridList文档。在高级网格列表下,您将看到一个大图像和许多小图像。我的目标是将其

  • 问题内容: 引导轮播是否可扩展以在滑块中显示下一个和上一个图像? 目前,我的轮播看起来像这样,如何将上一张和下一张图像添加到当前活动的幻灯片中? 问题答案: Bootstrap是可能的,但是需要一些自定义… 您必须使用CSS和jQuery自定义幻灯片的位置。 另一个变化是仅显示下一张和上一张幻灯片的一部分。这可以通过在.. 的左侧和右侧上放置绝对位置叠加来完成。

  • 问题内容: 我试图当鼠标移到图像的左下方时出现一个小框。在该框内,将有一个指向其他页面的链接。 这有点类似于我想要的东西,但是盒子要更小并且不连接到图像的边框。 我已经尝试了一切,但找不到答案。而且我不想使用工具提示,更不用说我没有任何JavaScript知识了。我真的希望这是CSS。 问题答案: 这是在CSS3中使用伪元素。 HTML: CSS: 相反,这是使用jquery达到相同结果的一种方式

  • 我使用Android Studios 1.5 我正在尝试做一些非常简单的事情:在我的项目中添加一个大的图像,作为我主要活动的背景。当我右键单击res时- 我做错了什么?我读过好几页,没有其他人有过这个问题。

  • 问题内容: 我是Rails编程的初学者,试图在页面上显示许多图像。有些图像要放在其他图像之上。为简单起见,假设我要一个蓝色正方形,在蓝色正方形的右上角有一个红色正方形(但在角落不紧)。由于性能问题,我试图避免进行合成(使用ImageMagick等)。 我只想相对于彼此放置重叠的图像。 举一个更困难的例子,想象一下将里程表放在更大的图像中。对于六位数字,我将需要合成一百万个不同的图像,或者即时进行处

  • 我有一张png图像,为了更好的tesseract OCR质量,我对它进行了改进,之后我需要从原始图像制作一个可搜索的pdf。 我可以使用以下python代码,通过tesseract从改进后的图像创建一个可搜索的pdf: 然而,我想要的不是用我创建的黑白图像创建一个PDF,而是使用该b的tesseract输出