mirror of
https://github.com/JetBrains/intellij-sdk-code-samples.git
synced 2025-07-28 01:07:49 +08:00
User Interface FAQ: initial
This commit is contained in:
parent
732e178425
commit
1b95f9dea7
1
ijs.tree
1
ijs.tree
@ -84,6 +84,7 @@
|
|||||||
<toc-element topic="status_bar_widgets.md"/>
|
<toc-element topic="status_bar_widgets.md"/>
|
||||||
<toc-element topic="misc_swing_components.md"/>
|
<toc-element topic="misc_swing_components.md"/>
|
||||||
<toc-element topic="icons.md" toc-title="Icons" accepts-web-file-names="work-with-icons-and-images.html"/>
|
<toc-element topic="icons.md" toc-title="Icons" accepts-web-file-names="work-with-icons-and-images.html"/>
|
||||||
|
<toc-element topic="ui_faq.md"/>
|
||||||
<toc-element topic="jcef.md"/>
|
<toc-element topic="jcef.md"/>
|
||||||
<toc-element topic="color_scheme_management.md"/>
|
<toc-element topic="color_scheme_management.md"/>
|
||||||
<toc-element topic="themes_metadata.md"/>
|
<toc-element topic="themes_metadata.md"/>
|
||||||
|
@ -18,6 +18,9 @@ See [GitHub Changelog](https://github.com/JetBrains/intellij-sdk-docs/commits/ma
|
|||||||
JCEF
|
JCEF
|
||||||
: Revamp [JCEF (Java Chromium Embedded Framework)](jcef.md) page.
|
: Revamp [JCEF (Java Chromium Embedded Framework)](jcef.md) page.
|
||||||
|
|
||||||
|
User Interface FAQ
|
||||||
|
: Added [](ui_faq.md).
|
||||||
|
|
||||||
### November
|
### November
|
||||||
{#november-23}
|
{#november-23}
|
||||||
|
|
||||||
|
65
topics/user_interface_components/ui_faq.md
Normal file
65
topics/user_interface_components/ui_faq.md
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
<!-- Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
|
||||||
|
|
||||||
|
# User Interface FAQ
|
||||||
|
|
||||||
|
<link-summary>UI-related FAQs and utilities.</link-summary>
|
||||||
|
|
||||||
|
<include from="user_interface_components.md" element-id="inspectingExistingUI"/>
|
||||||
|
|
||||||
|
## Useful classes
|
||||||
|
|
||||||
|
- Package [`com.intellij.ui`](%gh-ic%/platform/util/ui/src/com/intellij/ui/)
|
||||||
|
- Package [`com.intellij.util.ui`](%gh-ic%/platform/util/ui/src/com/intellij/util/ui/)
|
||||||
|
|
||||||
|
## Colors
|
||||||
|
|
||||||
|
Always use [`JBColor`](%gh-ic%/platform/util/ui/src/com/intellij/ui/JBColor.java) instead of plain `java.awt.Color`
|
||||||
|
(highlighted via inspection <control>Plugin DevKit | Code | Use Darcula aware JBColor</control>).
|
||||||
|
Custom colors must be retrieved via `JBColor.namedColor()` set by the current [Theme](themes_getting_started.md).
|
||||||
|
See [](themes_metadata.md) on how to expose corresponding metadata.
|
||||||
|
|
||||||
|
If it's needed to retrieve a color from one place and use it in another, do not just retrieve once and use the retrieved value.
|
||||||
|
Instead, use `JBColor.lazy()` and pass in a lambda expression to retrieve the color.
|
||||||
|
This lambda expression needs to be fast and safe enough, as it will be called every time the color is retrieved, for example, for painting.
|
||||||
|
Following this approach ensures that the color will be properly updated if it's changed at the source, for example, due to a theme or scheme change.
|
||||||
|
|
||||||
|
Generic UI colors (e.g., for drawing borders) can be accessed via [`UIUtil`](%gh-ic%/platform/util/ui/src/com/intellij/util/ui/UIUtil.java)
|
||||||
|
and [`JBUI`](%gh-ic%/platform/util/ui/src/com/intellij/util/ui/JBUI.java).
|
||||||
|
A number of hardcoded colors is defined in `JBColor`, [`Gray`](%gh-ic%/platform/util/ui/src/com/intellij/ui/Gray.java), and [`LightColors`](%gh-ic%/platform/util/ui/src/com/intellij/ui/LightColors.java)
|
||||||
|
|
||||||
|
[`ColorUtil`](%gh-ic%/platform/util/ui/src/com/intellij/ui/ColorUtil.java) allows tuning existing colors.
|
||||||
|
|
||||||
|
## Text
|
||||||
|
|
||||||
|
Use [`NaturalComparator`](%gh-ic%/platform/util/base/src/com/intellij/openapi/util/text/NaturalComparator.java) for "natural" sorting of items.
|
||||||
|
|
||||||
|
[`StringUtil`](%gh-ic%/platform/util/src/com/intellij/openapi/util/text/StringUtil.java) contains a number of useful methods for manipulating text for UI usage:
|
||||||
|
|
||||||
|
- `unpluralize()/pluralize()` using English rules
|
||||||
|
- `formatDuration()` to format duration: _2 m 3 s 456 ms_
|
||||||
|
- `formatFileSize()` to format filesize: _1.23 KB_
|
||||||
|
- `escapeLineBreak()` and related methods to escape special characters
|
||||||
|
- `shortenTextWithEllipsis()` and `shortenPathWithEllipsis()` to produce abbreviated UI texts ending with '…'
|
||||||
|
- `quote()` and `unquoteString()` to wrap values: _Usages of "$value$": 218 found_
|
||||||
|
|
||||||
|
See [`NlsMessages`](%gh-ic%/platform/ide-core-impl/src/com/intellij/ide/nls/NlsMessages.java) to produce localized messages.
|
||||||
|
|
||||||
|
## "Recently Used" entries
|
||||||
|
|
||||||
|
To store and retrieve values for *Recently Used* entries (e.g., filter values), use
|
||||||
|
[`RecentsManager`](%gh-ic%/platform/platform-impl/src/com/intellij/ui/RecentsManager.java).
|
||||||
|
|
||||||
|
## Current Theme: Dark or Bright?
|
||||||
|
|
||||||
|
To determine the current [Theme](themes_getting_started.md)'s style, use [`JBColor.isBright()`](%gh-ic%/platform/util/ui/src/com/intellij/ui/JBColor.java).
|
||||||
|
|
||||||
|
## Borders and Insets
|
||||||
|
|
||||||
|
Always create borders and insets via factory methods from [`JBUI.Borders`](%gh-ic%/platform/util/ui/src/com/intellij/util/ui/JBUI.java) and [`JBUI.Insets`](%gh-ic%/platform/util/ui/src/com/intellij/util/ui/JBUI.java), which create DPI-aware instances.
|
||||||
|
Using standard DPI-agnostic instances (reported by inspection <ui-path>Plugin DevKit | Code | Use DPI-aware borders</ui-path> and <ui-path>Plugin DevKit | Code | Use DPI-aware insets</ui-path>)
|
||||||
|
can result in UI layout problems.
|
||||||
|
|
||||||
|
If you use DPI-aware insets in an empty border (`JBUI.Borders.empty()`), then the insets will be updated automatically, for example, if scaling is changed because the <ui-path>IDE Zoom</ui-path> action was performed or for any other reason.
|
||||||
|
If you use the insets elsewhere, you need to manually call `JBInsets.update()` in your component's `updateUI()` method to update the insets accordingly.
|
||||||
|
|
||||||
|
<include from="snippets.md" element-id="missingContent"/>
|
@ -46,4 +46,6 @@ The following components are particularly noteworthy:
|
|||||||
* Drag & Drop Helpers (TBD)
|
* Drag & Drop Helpers (TBD)
|
||||||
* [](misc_swing_components.md)
|
* [](misc_swing_components.md)
|
||||||
|
|
||||||
|
See also [](ui_faq.md).
|
||||||
|
|
||||||
<include from="snippets.md" element-id="missingContent"/>
|
<include from="snippets.md" element-id="missingContent"/>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user