# Vision Palette Group Icon

**URL:** <https://forum.inductiveautomation.com/t/vision-palette-group-icon/82610>\
**Category:** Module Development\
**Tags:** vision\
**Created:** [December 1, 2023, 9:36pm UTC](https://forum.inductiveautomation.com/t/vision-palette-group-icon/82610 "2023-12-01T21:36:55Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![Mathias\_Melling](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/mathias_melling/32/67682_2.png) [@Mathias\_Melling](https://forum.inductiveautomation.com/u/Mathias_Melling)\
**Post date:** [December 1, 2023, 9:36pm UTC](https://forum.inductiveautomation.com/t/vision-palette-group-icon/82610/1 "2023-12-01T21:36:55Z")

</div>

How do I change the icon of the vision module? I can set icons for the components within my module, but I can't seem to change the module icon from the green puzzle that shows up by default.

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [December 1, 2023, 9:49pm UTC](https://forum.inductiveautomation.com/t/vision-palette-group-icon/82610/2 "2023-12-01T21:49:01Z")

</div>

Where is this applicable? (The Vision module is supplied by IA, so I wouldn't expect anything you do in your module could change anything about it.)

---

<div class="post-metadata">

**Author:** ![Mathias\_Melling](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/mathias_melling/32/67682_2.png) [@Mathias\_Melling](https://forum.inductiveautomation.com/u/Mathias_Melling)\
**Post date:** [December 1, 2023, 9:53pm UTC](https://forum.inductiveautomation.com/t/vision-palette-group-icon/82610/3 "2023-12-01T21:53:12Z")

</div>

Sorry, that was badly worded. I added a component to the vision module, just like the Reporting component.

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/3/b/3b2e10ee5059662ca3d87185592326d617d632ae.png)

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [December 1, 2023, 10:26pm UTC](https://forum.inductiveautomation.com/t/vision-palette-group-icon/82610/4 "2023-12-01T22:26:29Z")

</div>

Ah, I see. You need to implement the `getIcon(int kind)` method in your component's `BeanInfo`.

That method for my NoteChart component looks like this:

```auto
	@Override
	public Image getIcon(int kind) {
		switch (kind) {
		case BeanInfo.ICON_COLOR_16x16:
		case BeanInfo.ICON_MONO_16x16:
			return new ImageIcon(getClass().getResource("/images/note-chart_16.png")).getImage();
		case SimpleBeanInfo.ICON_COLOR_32x32:
		case SimpleBeanInfo.ICON_MONO_32x32:
			return new ImageIcon(getClass().getResource("/images/note-chart_32.png")).getImage();
		}
		return null;
	}

```

Edit: Ooooo! You've made your own **category**. You'll need to investigate how the `PaletteItemGroup` works. I've not done that, and wouldn't recommend it.

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [December 1, 2023, 10:28pm UTC](https://forum.inductiveautomation.com/t/vision-palette-group-icon/82610/5 "2023-12-01T22:28:00Z")

</div>

_Pssst!_

Don't use any punctuation in your component's name or description--they become the default component name, where that is forbidden.

---

<div class="post-metadata">

**Author:** ![Mathias\_Melling](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/mathias_melling/32/67682_2.png) [@Mathias\_Melling](https://forum.inductiveautomation.com/u/Mathias_Melling)\
**Post date:** [December 4, 2023, 2:45pm UTC](https://forum.inductiveautomation.com/t/vision-palette-group-icon/82610/6 "2023-12-04T14:45:12Z")

</div>

I took the punctuation out.

---

<div class="post-metadata">

**Author:** ![Mathias\_Melling](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/mathias_melling/32/67682_2.png) [@Mathias\_Melling](https://forum.inductiveautomation.com/u/Mathias_Melling)\
**Post date:** [December 4, 2023, 2:47pm UTC](https://forum.inductiveautomation.com/t/vision-palette-group-icon/82610/7 "2023-12-04T14:47:08Z")

</div>

What do you mean you wouldn't recommend making a category? Isn't that the only way to add your own components?  
I did check out the "PaletteItemGroup", but it doesn't seem to have a way to set an Icon. However, there is a "DefaultPaletteItemGroup" that does have a "setIcon()" method. Can I use that somehow?

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [December 4, 2023, 2:50pm UTC](https://forum.inductiveautomation.com/t/vision-palette-group-icon/82610/8 "2023-12-04T14:50:22Z")

</div>

> [@Mathias\_Melling](#):
>
> Isn't that the only way to add your own components?

No, add your components to an existing category.

---

<div class="post-metadata">

**Author:** ![Mathias\_Melling](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/mathias_melling/32/67682_2.png) [@Mathias\_Melling](https://forum.inductiveautomation.com/u/Mathias_Melling)\
**Post date:** [December 4, 2023, 2:57pm UTC](https://forum.inductiveautomation.com/t/vision-palette-group-icon/82610/9 "2023-12-04T14:57:35Z")

</div>

Hm, that's how it was setup in the example that I downloaded to get started on this.

[https://docs.inductiveautomation.com/display/SE/Designer+Hook](https://docs.inductiveautomation.com/display/SE/Designer+Hook)

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [December 4, 2023, 3:04pm UTC](https://forum.inductiveautomation.com/t/vision-palette-group-icon/82610/10 "2023-12-04T15:04:39Z")

</div>

Couple things clear from the JavaDocs:

- `CustomPaletteItemGroup` is a subclass of `DefaultPaletteItemGroup`, so you should be able to set an icon.

- The [PaletteImpl](https://files.inductiveautomation.com/sdk/javadoc/ignition81/8.1.30/com/inductiveautomation/factorypmi/designer/palette/model/PaletteImpl.html) has a [getGroupAt(int)](https://files.inductiveautomation.com/sdk/javadoc/ignition81/8.1.30/com/inductiveautomation/factorypmi/designer/palette/model/PaletteImpl.html#getGroupAt(int)) method that could be used to discover all of the existing palette item group names for you to re-use.

---

<div class="post-metadata">

**Author:** ![Mathias\_Melling](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/mathias_melling/32/67682_2.png) [@Mathias\_Melling](https://forum.inductiveautomation.com/u/Mathias_Melling)\
**Post date:** [December 4, 2023, 4:20pm UTC](https://forum.inductiveautomation.com/t/vision-palette-group-icon/82610/11 "2023-12-04T16:20:37Z")

</div>

I would like to stick to my own category, since there will be about 10 components that I will add. To have them all grouped together is the way to go I think.

---

<div class="post-metadata">

**Author:** ![paul-griffith](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/paul-griffith/32/37249_2.png) [@paul-griffith](https://forum.inductiveautomation.com/u/paul-griffith)\
**Post date:** [December 4, 2023, 4:39pm UTC](https://forum.inductiveautomation.com/t/vision-palette-group-icon/82610/12 "2023-12-04T16:39:22Z")

</div>

> [@pturmel](#):
>
> you should be able to set an icon.

Indeed, there's a public icon bean property. Should be able to set any arbitrary icon on your custom group that way.

---

<div class="post-metadata">

**Author:** ![Mathias\_Melling](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/mathias_melling/32/67682_2.png) [@Mathias\_Melling](https://forum.inductiveautomation.com/u/Mathias_Melling)\
**Post date:** [December 4, 2023, 4:50pm UTC](https://forum.inductiveautomation.com/t/vision-palette-group-icon/82610/13 "2023-12-04T16:50:23Z")

</div>

Sure, I can set an icon for each component within the group. I've been able to do that.  
However, the group itself has the green puzzle icon, which I'm struggling to change.

---

<div class="post-metadata">

**Author:** ![Mathias\_Melling](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/mathias_melling/32/67682_2.png) [@Mathias\_Melling](https://forum.inductiveautomation.com/u/Mathias_Melling)\
**Post date:** [December 4, 2023, 4:54pm UTC](https://forum.inductiveautomation.com/t/vision-palette-group-icon/82610/14 "2023-12-04T16:54:48Z")

</div>

I tried the following, but that doesn't change the icon. Note the `DefaultPaletteItemGroup`

```auto
DefaultPaletteItemGroup group = (DefaultPaletteItemGroup) palette.addGroup("LV Control");
            group.addPaletteItem(new JavaBeanPaletteItem(HelloWorldComponent.class));
            group.addPaletteItem(new JavaBeanPaletteItem(BinComponent.class));
            group.setIcon((Icon) new ImageIcon(getClass().getResource("/images/lv_32.png")).getImage());

```

---

<div class="post-metadata">

**Author:** ![paul-griffith](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/paul-griffith/32/37249_2.png) [@paul-griffith](https://forum.inductiveautomation.com/u/paul-griffith)\
**Post date:** [December 4, 2023, 5:01pm UTC](https://forum.inductiveautomation.com/t/vision-palette-group-icon/82610/15 "2023-12-04T17:01:52Z")

</div>

What if you construct your group completely and then pass it in to the other overload of addGroup?

```java
PaletteItemGroup group = new CustomPaletteItemGroup("LV Control");
group.setIcon(new ImageIcon(getClass().getResource("/images/lv_32.png")).getImage());
group.addPaletteItem(new JavaBeanPaletteItem(HelloWorldComponent.class));
group.addPaletteItem(new JavaBeanPaletteItem(BinComponent.class));
palette.addGroup(group);

```

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [December 4, 2023, 5:02pm UTC](https://forum.inductiveautomation.com/t/vision-palette-group-icon/82610/16 "2023-12-04T17:02:23Z")

</div>

PaletteImpl also has an `addGroup(PaletteItemGroup group)` method. Perhaps you should create a `CustomPaletteItemGroup` then add it.

---

<div class="post-metadata">

**Author:** ![Mathias\_Melling](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/mathias_melling/32/67682_2.png) [@Mathias\_Melling](https://forum.inductiveautomation.com/u/Mathias_Melling)\
**Post date:** [December 4, 2023, 5:13pm UTC](https://forum.inductiveautomation.com/t/vision-palette-group-icon/82610/17 "2023-12-04T17:13:26Z")

</div>

the `addGroup("String")` is expecting a string, it won't let me put the group in there.

---

<div class="post-metadata">

**Author:** ![Mathias\_Melling](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/mathias_melling/32/67682_2.png) [@Mathias\_Melling](https://forum.inductiveautomation.com/u/Mathias_Melling)\
**Post date:** [December 4, 2023, 5:30pm UTC](https://forum.inductiveautomation.com/t/vision-palette-group-icon/82610/18 "2023-12-04T17:30:21Z")

</div>

I tried the PaletteImpl, but still no success. The below code actually causes my group to disappear altogether.

```auto
VisionDesignerInterface sdk = (VisionDesignerInterface) context
                .getModule(VisionDesignerInterface.VISION_MODULE_ID);
        if (sdk != null) {
            PaletteImpl palette = new PaletteImpl(sdk);
            
            CustomPaletteItemGroup group = new CustomPaletteItemGroup("LV Control");
            group.addPaletteItem(new JavaBeanPaletteItem(HelloWorldComponent.class));
            group.addPaletteItem(new JavaBeanPaletteItem(BinComponent.class));
            group.setIcon((Icon) new ImageIcon(getClass().getResource("/images/lv_32.png")).getImage());
            
            palette.addGroup(group);

```

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [December 4, 2023, 8:21pm UTC](https://forum.inductiveautomation.com/t/vision-palette-group-icon/82610/19 "2023-12-04T20:21:05Z")

</div>

Don't create a new Palette or PaletteImpl. Cast the Vision palette to PaletteImpl so you can use the overload of addGroup().

---

<div class="post-metadata">

**Author:** ![Mathias\_Melling](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/mathias_melling/32/67682_2.png) [@Mathias\_Melling](https://forum.inductiveautomation.com/u/Mathias_Melling)\
**Post date:** [December 4, 2023, 10:30pm UTC](https://forum.inductiveautomation.com/t/vision-palette-group-icon/82610/20 "2023-12-04T22:30:17Z")

</div>

This is what I have right now, and my group won't show up at all in the vision component palette

```auto
PaletteImpl palette = (PaletteImpl) sdk.getPalette();
            
            CustomPaletteItemGroup group = new CustomPaletteItemGroup("LV Control");
            group.addPaletteItem(new JavaBeanPaletteItem(HelloWorldComponent.class));
            group.addPaletteItem(new JavaBeanPaletteItem(BinComponent.class));
            group.setIcon((Icon) new ImageIcon(getClass().getResource("/images/lv_32.png")).getImage());
            palette.addGroup(group);

```

[Next page](https://forum.inductiveautomation.com/t/vision-palette-group-icon/82610.md?page=2)
