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

绘制一个包含显示圆圈的图标的标签

韦胜泫
2023-03-14
问题内容

因此,我试图绘制一个标签,其中包含一个显示圆圈的图标。圆圈最初将被填充为红色,然后根据我按下的三个按钮中的哪个按钮,将使用重绘将其更改为绿色,蓝色或红色。

这是我到目前为止的内容:

public class ColorChanger implements Icon {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        JFrame myFrame = new JFrame();
        JButton redButton = new JButton("Red");
        JButton greenButton = new JButton("Green");
        JButton blueButton = new JButton("Blue");
        Graphics g;

        ColorChanger myCircle = new ColorChanger();
        final JLabel myLabel = new JLabel(myCircle);

    //  myCircle.paintIcon(myFrame, g, 50, 50);

        final int FRAME_WIDTH = 300;
        final int FRAME_HEIGHT = 200;

        myFrame.setSize(FRAME_WIDTH, FRAME_HEIGHT);
        myFrame.setLayout(new FlowLayout());

        myFrame.add(redButton);
        myFrame.add(greenButton);
        myFrame.add(blueButton);
        myFrame.add(myLabel);

        myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        myFrame.pack();
        myFrame.setVisible(true); 
    }

    @Override
    public int getIconWidth() {
        // TODO Auto-generated method stub
        return 10;
    }

    @Override
    public int getIconHeight() {
        // TODO Auto-generated method stub
        return 10;
    }

    @Override
    public void paintIcon(Component c, Graphics g, int x, int y) {
        // TODO Auto-generated method stub
        Graphics2D g2 = (Graphics2D) g;
        Ellipse2D.Double circle = new Ellipse2D.Double(50, 50, 10, 10);
        g2.setColor(Color.RED);
        g2.fill(circle);
    }    
}

我的问题是,我不知道在paintIcon中如何传递Graphics g。有其他方法可以做到这一点吗?我对此表示感谢。


问题答案:
Ellipse2D.Double circle = new Ellipse2D.Double(50, 50, 10, 10);

图标的大小为(10,10)。50,超出了Icon的范围。相对于图标完成绘制,因此椭圆应为:

Ellipse2D.Double circle = new Ellipse2D.Double(0, 0, 10, 10);

使用重绘它将变为绿色,蓝色或红色。

您的ColorChanger类将需要一个setColor(Color color)方法,以便您可以动态更改要绘制的颜色。然后,paintIcon()方法应使用此颜色。



 类似资料:
  • 问题内容: 我在某些项目上使用了超棒的字体,但是我想对 超棒的字体图标做一些事情,我可以像这样轻松地调用一个图标: 是否有可能所有图标始终都带有边框的圆形?事情是这样的,我有一个画面: Using 会产生效果,但问题是图标总是比 旁边的文本或元素大,有解决方案吗? 问题答案: i.fa {

  • 问题内容: 我只想在鼠标单击后绘制圆圈。由于paintComponent方法调用了自身,因此首先绘制圆而无需单击。 问题答案: 您的代码存在一些问题: 你永远不会打电话 你只需要一个和 请注意,当您调整框架大小时,某些圆圈将消失,并且总体上以奇怪的方式表现。 我会将所有s 存储在用户单击的位置,然后在方法内部遍历该列表。这样您就可以通话,而圈子不会消失。 更改后的工作代码:

  • 我有一组数据,我正在分散地绘制。当我将鼠标滑过其中一个圆圈时,我希望它弹出数据(比如x、y值,可能更多)。以下是我尝试使用的: 我想我需要更多关于输入什么数据的信息?

  • 我试着把第二个播放器放在一个有圆角的框架内(这个答案和这个答案),但是播放器总是会跳出父框架并绘制视频的完整矩形。 我发现这个解决方案使用GLSurfaceView,但是这个解决方案使用经典的MediaPlayer而不是ExoPlayer。

  • 我在一些项目上使用字体真棒,但我有一些事情,我想用字体真棒图标做,我可以很容易地调用这样的图标: 所有图标是否可能始终处于带边框的圆形中?像这样,我有一张照片: 使用 会产生效果,但问题是图标总是比旁边的文本或元素大,有什么解决方案吗?

  • 我正在尝试制作重力的效果,但它看起来只是有越来越多的圆圈条纹,而不是单个圆圈向下移动。我不知道如何删除我已经绘制的圆圈。顺便说一句,代码中没有错误。