Browse Source

REPORT-99485 工具栏ButtonGroup样式调整

newui
vito 9 months ago
parent
commit
6045c6b863
  1. 12
      designer-base/src/main/java/com/fine/theme/light/ui/FineButtonGroupUI.java
  2. 11
      designer-base/src/main/java/com/fine/theme/light/ui/FineRoundBorder.java
  3. 15
      designer-base/src/main/java/com/fine/theme/utils/FineUIStyle.java
  4. 25
      designer-base/src/main/java/com/fr/design/gui/ibutton/UIButtonGroup.java
  5. 8
      designer-base/src/main/resources/com/fine/theme/light/ui/laf/FineLightLaf.properties
  6. 14
      designer-base/src/test/java/com/fr/design/gui/storybook/components/ButtonGroupStoryBoard.java
  7. 6
      designer-realize/src/main/java/com/fr/design/actions/ButtonGroupAction.java
  8. 7
      designer-realize/src/main/java/com/fr/design/actions/cell/style/AlignmentAction.java

12
designer-base/src/main/java/com/fine/theme/light/ui/FineButtonGroupUI.java

@ -1,8 +1,11 @@
package com.fine.theme.light.ui; package com.fine.theme.light.ui;
import com.fr.design.gui.ibutton.UIButtonGroup;
import javax.swing.JComponent; import javax.swing.JComponent;
import javax.swing.plaf.ComponentUI; import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.PanelUI; import javax.swing.plaf.PanelUI;
import java.awt.Graphics;
/** /**
* 按钮组UI应用于 {@link com.fr.design.gui.ibutton.UIButtonGroup} * 按钮组UI应用于 {@link com.fr.design.gui.ibutton.UIButtonGroup}
@ -24,9 +27,12 @@ public class FineButtonGroupUI extends PanelUI {
} }
@Override @Override
public void installUI(JComponent c) { public void update(Graphics g, JComponent c) {
super.installUI(c); UIButtonGroup group = (UIButtonGroup) c;
c.setBorder(new FineRoundBorder()); if (!group.isInToolbar()) {
c.setBorder(new FineRoundBorder());
}
super.update(g, c);
} }
@Override @Override

11
designer-base/src/main/java/com/fine/theme/light/ui/FineRoundBorder.java

@ -8,6 +8,7 @@ import com.fr.design.event.HoverAware;
import java.awt.Color; import java.awt.Color;
import java.awt.Component; import java.awt.Component;
import java.awt.Paint; import java.awt.Paint;
import java.util.StringJoiner;
/** /**
@ -49,4 +50,14 @@ public class FineRoundBorder extends FlatRoundBorder {
return highlightBorderColor; return highlightBorderColor;
} }
@Override
public String toString() {
return new StringJoiner(", ", FineRoundBorder.class.getSimpleName() + "[", "]")
.add("borderColor=" + borderColor)
.add("arc=" + arc)
.add("roundRect=" + roundRect)
.add("borderWidth=" + borderWidth)
.toString();
}
} }

15
designer-base/src/main/java/com/fine/theme/utils/FineUIStyle.java

@ -0,0 +1,15 @@
package com.fine.theme.utils;
/**
* UI样式工具
*
* @author vito
* @since 11.0
* Created on 2024/1/4
*/
public interface FineUIStyle {
String IN_TOOLBAR_GROUP = "inToolbarGroup";
}

25
designer-base/src/main/java/com/fr/design/gui/ibutton/UIButtonGroup.java

@ -4,6 +4,7 @@ import com.fine.swing.ui.layout.Column;
import com.fine.swing.ui.layout.Row; import com.fine.swing.ui.layout.Row;
import com.fine.swing.ui.layout.Spacer; import com.fine.swing.ui.layout.Spacer;
import com.fine.theme.light.ui.FineRoundBorder; import com.fine.theme.light.ui.FineRoundBorder;
import com.fine.theme.utils.FineClientProperties;
import com.fine.theme.utils.FineUIScale; import com.fine.theme.utils.FineUIScale;
import com.fine.theme.utils.FineUIUtils; import com.fine.theme.utils.FineUIUtils;
import com.fr.design.event.GlobalNameListener; import com.fr.design.event.GlobalNameListener;
@ -26,9 +27,9 @@ import java.util.Arrays;
import java.util.List; import java.util.List;
import static com.fine.swing.ui.layout.Layouts.cell; import static com.fine.swing.ui.layout.Layouts.cell;
import static com.fine.theme.utils.FineClientProperties.BUTTON_TYPE_GROUP;
import static com.fine.theme.utils.FineClientProperties.BUTTON_TYPE;
import static com.fine.theme.utils.FineClientProperties.BUTTON_GROUP_POSITION; import static com.fine.theme.utils.FineClientProperties.BUTTON_GROUP_POSITION;
import static com.fine.theme.utils.FineClientProperties.BUTTON_TYPE;
import static com.fine.theme.utils.FineClientProperties.BUTTON_TYPE_GROUP;
import static com.fine.theme.utils.FineClientProperties.GROUP_BUTTON_POSITION_INNER; import static com.fine.theme.utils.FineClientProperties.GROUP_BUTTON_POSITION_INNER;
import static com.fine.theme.utils.FineClientProperties.GROUP_BUTTON_POSITION_LEFT; import static com.fine.theme.utils.FineClientProperties.GROUP_BUTTON_POSITION_LEFT;
import static com.fine.theme.utils.FineClientProperties.GROUP_BUTTON_POSITION_LEFT_BOTTOM; import static com.fine.theme.utils.FineClientProperties.GROUP_BUTTON_POSITION_LEFT_BOTTOM;
@ -36,6 +37,8 @@ import static com.fine.theme.utils.FineClientProperties.GROUP_BUTTON_POSITION_LE
import static com.fine.theme.utils.FineClientProperties.GROUP_BUTTON_POSITION_RIGHT; import static com.fine.theme.utils.FineClientProperties.GROUP_BUTTON_POSITION_RIGHT;
import static com.fine.theme.utils.FineClientProperties.GROUP_BUTTON_POSITION_RIGHT_BOTTOM; import static com.fine.theme.utils.FineClientProperties.GROUP_BUTTON_POSITION_RIGHT_BOTTOM;
import static com.fine.theme.utils.FineClientProperties.GROUP_BUTTON_POSITION_RIGHT_TOP; import static com.fine.theme.utils.FineClientProperties.GROUP_BUTTON_POSITION_RIGHT_TOP;
import static com.fine.theme.utils.FineUIStyle.IN_TOOLBAR_GROUP;
import static com.formdev.flatlaf.FlatClientProperties.BUTTON_TYPE_TOOLBAR_BUTTON;
public class UIButtonGroup<T> extends Column implements GlobalNameObserver, UIObserver { public class UIButtonGroup<T> extends Column implements GlobalNameObserver, UIObserver {
private static final String UI_CLASS_ID = "ButtonGroupUI"; private static final String UI_CLASS_ID = "ButtonGroupUI";
@ -51,6 +54,8 @@ public class UIButtonGroup<T> extends Column implements GlobalNameObserver, UIOb
private UIObserverListener uiObserverListener; private UIObserverListener uiObserverListener;
private boolean autoFireStateChanged = true; private boolean autoFireStateChanged = true;
private boolean inToolbar = false;
public UIButtonGroup(String[] textArray) { public UIButtonGroup(String[] textArray) {
this(textArray, null); this(textArray, null);
} }
@ -100,6 +105,11 @@ public class UIButtonGroup<T> extends Column implements GlobalNameObserver, UIOb
} }
public UIButtonGroup(Icon[][] iconArray, T[] objects) { public UIButtonGroup(Icon[][] iconArray, T[] objects) {
this(iconArray, objects, false);
}
public UIButtonGroup(Icon[][] iconArray, T[] objects, boolean inToolbar) {
this.inToolbar = inToolbar;
if (!ArrayUtils.isEmpty(objects) && iconArray.length == objects.length) { if (!ArrayUtils.isEmpty(objects) && iconArray.length == objects.length) {
this.objectList = Arrays.asList(objects); this.objectList = Arrays.asList(objects);
} }
@ -192,7 +202,7 @@ public class UIButtonGroup<T> extends Column implements GlobalNameObserver, UIOb
for (int j = 0; j < col; j++) { for (int j = 0; j < col; j++) {
rowContainer.add(cell(labelButtonList.get(currentIndex)).weight(1.0)); rowContainer.add(cell(labelButtonList.get(currentIndex)).weight(1.0));
currentIndex++; currentIndex++;
if (j != col - 1) { if (j != col - 1 && !inToolbar) {
rowContainer.add(createDivider()); rowContainer.add(createDivider());
} }
} }
@ -219,6 +229,7 @@ public class UIButtonGroup<T> extends Column implements GlobalNameObserver, UIOb
/** /**
* 计算按钮位于整个按钮组件中的位置 * 计算按钮位于整个按钮组件中的位置
*
* @param index 按钮序号 * @param index 按钮序号
* @return 按钮位置详见 {@link com.fine.theme.utils.FineClientProperties} * @return 按钮位置详见 {@link com.fine.theme.utils.FineClientProperties}
*/ */
@ -256,13 +267,21 @@ public class UIButtonGroup<T> extends Column implements GlobalNameObserver, UIOb
public void setForToolBarButtonGroup(boolean isToolBarComponent) { public void setForToolBarButtonGroup(boolean isToolBarComponent) {
if (isToolBarComponent) { if (isToolBarComponent) {
inToolbar = true;
for (UIToggleButton uiToggleButton : labelButtonList) { for (UIToggleButton uiToggleButton : labelButtonList) {
uiToggleButton.putClientProperty(BUTTON_TYPE, BUTTON_TYPE_TOOLBAR_BUTTON);
FineClientProperties.setStyle(uiToggleButton, IN_TOOLBAR_GROUP);
uiToggleButton.set4ToolbarButton(); uiToggleButton.set4ToolbarButton();
uiToggleButton.setBorderPainted(false);
} }
} }
repaint(); repaint();
} }
public boolean isInToolbar() {
return inToolbar;
}
@Override @Override
public void setEnabled(boolean enabled) { public void setEnabled(boolean enabled) {
super.setEnabled(enabled); super.setEnabled(enabled);

8
designer-base/src/main/resources/com/fine/theme/light/ui/laf/FineLightLaf.properties

@ -1226,14 +1226,18 @@ CellOtherSetPane.height=$Component.defaultHeight
background : #fff background : #fff
[style]Button.inToolbarLeft = \ [style]Button.inToolbarLeft = \
margin : 4,4,4,0 margin : 3,3,3,3
[style]Button.inToolbarRight = \ [style]Button.inToolbarRight = \
margin : 1,1,1,1 margin : 0,0,0,0
[style]ToolBar.topTools = \ [style]ToolBar.topTools = \
background: #fff background: #fff
[style]ToggleButton.inToolbarGroup = \
margin : 4,4,4,4; \
background : #fff
#---- clearButton ---- #---- clearButton ----
# for clear/cancel button in text fields # for clear/cancel button in text fields

14
designer-base/src/test/java/com/fr/design/gui/storybook/components/ButtonGroupStoryBoard.java

@ -4,11 +4,13 @@ import com.fine.theme.icon.LazyIcon;
import com.fr.design.gui.ibutton.UIButtonGroup; import com.fr.design.gui.ibutton.UIButtonGroup;
import com.fr.design.gui.ibutton.UITabGroup; import com.fr.design.gui.ibutton.UITabGroup;
import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.itoolbar.UIToolbar;
import com.fr.design.gui.storybook.Story; import com.fr.design.gui.storybook.Story;
import com.fr.design.gui.storybook.StoryBoard; import com.fr.design.gui.storybook.StoryBoard;
import com.fr.stable.ArrayUtils; import com.fr.stable.ArrayUtils;
import javax.swing.Icon; import javax.swing.Icon;
import java.awt.Component;
import static com.fine.swing.ui.layout.Layouts.cell; import static com.fine.swing.ui.layout.Layouts.cell;
import static com.fine.swing.ui.layout.Layouts.flex; import static com.fine.swing.ui.layout.Layouts.flex;
@ -41,10 +43,20 @@ public class ButtonGroupStoryBoard extends StoryBoard {
cell(new UITabGroup(fiveTextArray())), cell(new UITabGroup(fiveTextArray())),
cell(new UILabel("多行按钮-奇数场景-7按钮")).with(this::h3), cell(new UILabel("多行按钮-奇数场景-7按钮")).with(this::h3),
cell(new UITabGroup(sevenTextArray())), cell(new UITabGroup(sevenTextArray())),
cell(new UILabel("单行按钮-工具栏")).with(this::h3),
cell(getToolbar()),
flex() flex()
); );
} }
private static Component getToolbar(){
UIToolbar toolbar = new UIToolbar();
UIButtonGroup<Object> objectUIButtonGroup = new UIButtonGroup<>(iconArrayWithWhite(),null,true);
objectUIButtonGroup.setForToolBarButtonGroup(true);
toolbar.add(objectUIButtonGroup);
return toolbar;
}
private static Icon[] iconArray() { private static Icon[] iconArray() {
return ArrayUtils.toArray( return ArrayUtils.toArray(
new LazyIcon("edit"), new LazyIcon("edit"),
@ -53,7 +65,7 @@ public class ButtonGroupStoryBoard extends StoryBoard {
); );
} }
private Icon[][] iconArrayWithWhite() { private static Icon[][] iconArrayWithWhite() {
return ArrayUtils.toArray( return ArrayUtils.toArray(
ArrayUtils.toArray(new LazyIcon("edit"), new LazyIcon("copy")), ArrayUtils.toArray(new LazyIcon("edit"), new LazyIcon("copy")),
ArrayUtils.toArray(new LazyIcon("preview"), new LazyIcon("save")) ArrayUtils.toArray(new LazyIcon("preview"), new LazyIcon("save"))

6
designer-realize/src/main/java/com/fr/design/actions/ButtonGroupAction.java

@ -1,10 +1,10 @@
package com.fr.design.actions; package com.fr.design.actions;
import javax.swing.Icon;
import com.fr.design.gui.ibutton.UIButtonGroup; import com.fr.design.gui.ibutton.UIButtonGroup;
import com.fr.design.mainframe.ElementCasePane; import com.fr.design.mainframe.ElementCasePane;
import javax.swing.Icon;
public abstract class ButtonGroupAction extends ElementCaseAction{ public abstract class ButtonGroupAction extends ElementCaseAction{
protected Icon[][] iconArray; protected Icon[][] iconArray;
protected Integer[] valueArray; protected Integer[] valueArray;
@ -48,7 +48,7 @@ public abstract class ButtonGroupAction extends ElementCaseAction{
@Override @Override
public UIButtonGroup<Integer> createToolBarComponent() { public UIButtonGroup<Integer> createToolBarComponent() {
if(group == null) { if(group == null) {
group = new UIButtonGroup<Integer>(iconArray, valueArray); group = new UIButtonGroup<Integer>(iconArray, valueArray, true);
group.addActionListener(this); group.addActionListener(this);
} }
return group; return group;

7
designer-realize/src/main/java/com/fr/design/actions/cell/style/AlignmentAction.java

@ -6,7 +6,6 @@ import com.fr.base.Style;
import com.fr.base.chart.BaseChartCollection; import com.fr.base.chart.BaseChartCollection;
import com.fr.design.actions.ButtonGroupAction; import com.fr.design.actions.ButtonGroupAction;
import com.fr.design.actions.utils.ReportActionUtils; import com.fr.design.actions.utils.ReportActionUtils;
import com.fr.design.constants.UIConstants;
import com.fr.design.gui.ibutton.UIButtonGroup; import com.fr.design.gui.ibutton.UIButtonGroup;
import com.fr.design.mainframe.ElementCasePane; import com.fr.design.mainframe.ElementCasePane;
import com.fr.grid.selection.FloatSelection; import com.fr.grid.selection.FloatSelection;
@ -109,12 +108,6 @@ public class AlignmentAction extends ButtonGroupAction implements StyleActionInt
group.setForToolBarButtonGroup(true); group.setForToolBarButtonGroup(true);
group.setAllToolTips(new String[]{com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_StyleAlignment_Left"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Center"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_StyleAlignment_Right")}); group.setAllToolTips(new String[]{com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_StyleAlignment_Left"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Center"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_StyleAlignment_Right")});
} }
for (int i = 0; i < 3; i++) {
if (group != null) {
group.getButton(i).setRoundBorder(true, UIConstants.ARC);
group.getButton(i).setBorderPainted(true);
}
}
return group; return group;
} }

Loading…
Cancel
Save