Browse Source

REPORT-107972 设计器样式翻新-翻新按钮组

newui
Levy.Xie-解安森 1 year ago
parent
commit
39cda96bd2
  1. 357
      designer-base/src/main/java/com/fr/design/style/AbstractSelectBox.java
  2. 5
      designer-base/src/main/java/com/fr/design/style/background/BackgroundJComponent.java

357
designer-base/src/main/java/com/fr/design/style/AbstractSelectBox.java

@ -1,29 +1,24 @@
package com.fr.design.style; package com.fr.design.style;
import com.fr.design.constants.UIConstants; import com.fine.theme.light.ui.FineRoundBorder;
import com.fr.design.gui.ibutton.UIButton; import com.formdev.flatlaf.ui.FlatArrowButton;
import com.fr.design.gui.ibutton.UIButtonUI; import com.fr.design.event.HoverAware;
import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.style.background.BackgroundJComponent; import com.fr.design.style.background.BackgroundJComponent;
import com.fr.design.utils.gui.GUIPaintUtils;
import com.fr.stable.Constants;
import javax.swing.AbstractButton;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.JWindow; import javax.swing.JButton;
import javax.swing.border.AbstractBorder; import javax.swing.UIManager;
import javax.swing.event.AncestorEvent; import javax.swing.event.AncestorEvent;
import javax.swing.event.AncestorListener; import javax.swing.event.AncestorListener;
import javax.swing.plaf.ButtonUI; import javax.swing.SwingConstants;
import java.awt.BorderLayout; import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.Graphics; import java.awt.Graphics;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Insets;
import java.awt.Point; import java.awt.Point;
import java.awt.Rectangle; import java.awt.Rectangle;
import java.awt.RenderingHints; import java.awt.Color;
import java.awt.event.MouseAdapter; import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.awt.event.MouseListener; import java.awt.event.MouseListener;
@ -33,175 +28,171 @@ import java.awt.event.MouseListener;
* @version 创建时间2011-10-31 下午03:28:31 类说明: 抽象出来的弹出box. 可以弹出颜色选择, 图案选择, 纹理选择. * @version 创建时间2011-10-31 下午03:28:31 类说明: 抽象出来的弹出box. 可以弹出颜色选择, 图案选择, 纹理选择.
* 主要是 弹出界面的不同 * 主要是 弹出界面的不同
*/ */
public abstract class AbstractSelectBox<T> extends AbstractPopBox implements MouseListener { public abstract class AbstractSelectBox<T> extends AbstractPopBox implements MouseListener, HoverAware {
private static final long serialVersionUID = 2355250206956896774L; private static final long serialVersionUID = 2355250206956896774L;
private UIButton triggleButton; private boolean rollOver;
private JButton triggerButton;
protected void initBox(int preWidth) { private final int boxSize = UIManager.getInt("ComboBox.comboHeight");
this.setLayout(FRGUIPaneFactory.createBorderLayout()); private final int buttonOffsetX = UIManager.getInt("ComboBox.selectBox.button.offsetX");
displayComponent = new BackgroundJComponent(); protected void initBox(int preWidth) {
displayComponent.setEmptyBackground(); // 初始化面板布局
triggleButton = new UIButton(UIConstants.ARROW_DOWN_ICON) { this.setLayout(FRGUIPaneFactory.createBorderLayout());
public boolean shouldResponseChangeListener() { this.setBorder(new FineRoundBorder());
return false; this.setPreferredSize(new Dimension(getWidth(), boxSize));
} // 初始化组件
displayComponent = new BackgroundJComponent();
@Override triggerButton = new SelectBoxButton();
public ButtonUI getUI() { // 初始化组件布局
return new UIButtonUI() { JPanel displayPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
@Override displayPane.setBorder(null);
protected boolean isPressed(AbstractButton b) { displayPane.add(displayComponent, BorderLayout.CENTER);
return model.isArmed() && model.isPressed(); displayComponent.setPreferredSize(new Dimension(preWidth, displayPane.getPreferredSize().height));
} // 添加事件监听
displayComponent.addMouseListener(mouseListener);
@Override triggerButton.addMouseListener(mouseListener);
protected void doExtraPainting(UIButton b, Graphics2D g2d, int w, int h, String selectedRoles) { displayComponent.addMouseListener(this);
if (isPressed(b) && b.isPressedPainted()) { triggerButton.addMouseListener(this);
GUIPaintUtils.fillPressed(g2d, 0, 0, w, h, b.isRoundBorder(), b.getRectDirection(), b.isDoneAuthorityEdited(selectedRoles), UIConstants.COMBOBOX_BTN_PRESS);
} else if (isRollOver(b)) { this.add(displayPane, BorderLayout.CENTER);
GUIPaintUtils.fillRollOver(g2d, 0, 0, w, h, b.isRoundBorder(), b.getRectDirection(), b.isDoneAuthorityEdited(selectedRoles), b.isPressedPainted(), UIConstants.COMBOBOX_BTN_ROLLOVER); this.add(triggerButton, BorderLayout.EAST);
} else if (b.isNormalPainted()) {
GUIPaintUtils.fillNormal(g2d, 0, 0, w, h, b.isRoundBorder(), b.getRectDirection(), b.isDoneAuthorityEdited(selectedRoles), b.isPressedPainted(), UIConstants.COMBOBOX_BTN_NORMAL); this.addAncestorListener(new AncestorListener() {
} public void ancestorAdded(AncestorEvent event) {
} }
};
} public void ancestorRemoved(AncestorEvent evt) {
}; hidePopupMenu();
triggleButton.setPreferredSize(new Dimension(20, 20)); }
triggleButton.setRoundBorder(true, Constants.LEFT);
public void ancestorMoved(AncestorEvent event) {
JPanel displayPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); hidePopupMenu();
displayPane.add(displayComponent, BorderLayout.CENTER); }
displayComponent.setPreferredSize(new Dimension(preWidth, displayPane.getPreferredSize().height)); });
displayComponent.addMouseListener(mouseListener); displayComponent.addMouseListener(new MouseAdapter() {
triggleButton.addMouseListener(mouseListener); @Override
displayComponent.addMouseListener(this); public void mouseExited(MouseEvent e) {
triggleButton.addMouseListener(this); if (!isPopupVisible()) {
//如果弹出框==null 或者 弹出框不可见 直接return
this.add(displayPane, BorderLayout.CENTER); return;
this.add(triggleButton, BorderLayout.EAST); }
Point popMenuP = getControlWindow().getLocation();
this.addAncestorListener(new AncestorListener() { Point displayComponentP = displayComponent.getLocationOnScreen();
public void ancestorAdded(AncestorEvent event) { if (popMenuP.getX() < displayComponentP.getX() - 1) {
} //如果 弹出框横向超出屏幕 往左调整了 和displayComponent横向错开 就不处理了
return;
public void ancestorRemoved(AncestorEvent evt) { }
hidePopupMenu();
} Rectangle rectangle = displayComponent.getBounds();
boolean bottomPopAndExitTop = displayComponentP.getY() < popMenuP.getY() && e.getY() <= rectangle.y;
public void ancestorMoved(AncestorEvent event) { boolean topPopAndExitBottom = displayComponentP.getY() > popMenuP.getY() && e.getY() >= rectangle.y + rectangle.getHeight();
hidePopupMenu(); boolean exitLeftOrRight = rectangle.x > e.getX() || rectangle.x + rectangle.getWidth() < e.getX();
} if (bottomPopAndExitTop || topPopAndExitBottom || exitLeftOrRight) {
}); //弹出框在displayComponent下面 且 鼠标是从displayComponent上面离开的,隐藏弹出界面。
//弹出框在displayComponent上面 且 鼠标是从displayComponent下面离开的,隐藏弹出界面。
displayComponent.addMouseListener(new MouseAdapter() { //鼠标从displayComponent左边 或者 右边 离开,隐藏弹出界面。
@Override hidePopupMenu();
public void mouseExited(MouseEvent e) { }
if (!isPopupVisible()) {
//如果弹出框==null 或者 弹出框不可见 直接return }
return; });
} }
Point popMenuP = getControlWindow().getLocation();
Point displayComponentP = displayComponent.getLocationOnScreen(); public void setEnabled(boolean enabled) {
if (popMenuP.getX() < displayComponentP.getX() - 1) { super.setEnabled(enabled);
//如果 弹出框横向超出屏幕 往左调整了 和displayComponent横向错开 就不处理了
return; displayComponent.setEnabled(enabled);
} triggerButton.setEnabled(enabled);
}
Rectangle rectangle = displayComponent.getBounds();
boolean bottomPopAndExitTop = displayComponentP.getY() < popMenuP.getY() && e.getY() <= rectangle.y; @Override
boolean topPopAndExitBottom = displayComponentP.getY() > popMenuP.getY() && e.getY() >= rectangle.y + rectangle.getHeight(); public JPanel initWindowPane(double preWidth) {
boolean exitLeftOrRight = rectangle.x > e.getX() || rectangle.x + rectangle.getWidth() < e.getX(); return null;
if (bottomPopAndExitTop || topPopAndExitBottom || exitLeftOrRight) { }
//弹出框在displayComponent下面 且 鼠标是从displayComponent上面离开的,隐藏弹出界面。
//弹出框在displayComponent上面 且 鼠标是从displayComponent下面离开的,隐藏弹出界面。 @Override
//鼠标从displayComponent左边 或者 右边 离开,隐藏弹出界面。 public void paint(Graphics g) {
hidePopupMenu(); super.paint(g);
} triggerButton.setSelected(isPopupVisible());
}
}
}); /**
} * 应用于SelectBox的右侧按钮
*/
public void setEnabled(boolean enabled) { protected class SelectBoxButton extends FlatArrowButton {
super.setEnabled(enabled);
protected SelectBoxButton() {
displayComponent.setEnabled(enabled); this(SwingConstants.SOUTH,
triggleButton.setEnabled(enabled); UIManager.getString("Component.arrowType"),
} UIManager.getColor("ComboBox.buttonArrowColor"),
UIManager.getColor("ComboBox.buttonDisabledArrowColor"),
@Override null, null, null, null);
public JPanel initWindowPane(double preWidth) { }
// TODO Auto-generated method stub
return null; protected SelectBoxButton(int direction, String type, Color foreground, Color disabledForeground,
} Color hoverForeground, Color hoverBackground, Color pressedForeground, Color pressedBackground) {
super(direction, type, foreground, disabledForeground,
@Override hoverForeground, hoverBackground, pressedForeground, pressedBackground);
public void paint(Graphics g) { }
super.paint(g);
Graphics2D g2d = (Graphics2D)g; @Override
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); protected void paintArrow(Graphics2D g) {
g2d.setColor(UIConstants.POP_DIALOG_BORDER); if (isPopupVisible()) {
g2d.drawRoundRect(0, 0, this.getWidth() - 1 , this.getHeight() - 1, 4, 4); setDirection(SwingConstants.NORTH);
triggleButton.setSelected(isPopupVisible()); } else {
} setDirection(SwingConstants.SOUTH);
}
super.paintArrow(g);
public void addDemoPaneMouseListener(MouseListener l) { }
displayComponent.addMouseListener(l);
triggleButton.addMouseListener(l); @Override
} public Dimension getPreferredSize() {
return new Dimension(boxSize, boxSize);
public abstract T getSelectObject(); }
public abstract void setSelectObject(T t); @Override
public float getXOffset() {
private class TriggleLineBorder extends AbstractBorder { return buttonOffsetX;
private static final long serialVersionUID = 1065857667981063530L; }
protected Insets borderInsets = new Insets(0, 0, 0, 0); }
public void paintBorder(Component c, Graphics g, int x, int y, int w, int h) {
g.translate(x, y); public abstract T getSelectObject();
g.setColor(UIConstants.POP_DIALOG_BORDER); public abstract void setSelectObject(T t);
g.translate(-x, -y);
} @Override
public void mouseEntered(MouseEvent e) {
public Insets getBorderInsets(Component c) { rollOver = true;
return borderInsets; repaint();
} }
}
@Override
@Override public void mouseExited(MouseEvent e) {
public void mouseEntered(MouseEvent e) { rollOver = false;
triggleButton.getModel().setRollover(true); repaint();
} }
@Override @Override
public void mouseExited(MouseEvent e) { public void mouseClicked(MouseEvent e) {
triggleButton.getModel().setRollover(false);
} }
@Override @Override
public void mouseClicked(MouseEvent e) { public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
}
@Override
@Override public void mouseReleased(MouseEvent e) {
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub }
} @Override
public boolean isHovered() {
@Override return rollOver;
public void mouseReleased(MouseEvent e) { }
// TODO Auto-generated method stub
}
} }

5
designer-base/src/main/java/com/fr/design/style/background/BackgroundJComponent.java

@ -1,12 +1,9 @@
package com.fr.design.style.background; package com.fr.design.style.background;
import java.awt.Color;
import java.awt.Graphics; import java.awt.Graphics;
import java.awt.Insets; import java.awt.Insets;
import java.awt.geom.Rectangle2D; import java.awt.geom.Rectangle2D;
import javax.swing.JComponent; import javax.swing.JComponent;
import com.fr.design.border.UIRoundedBorder;
import com.fr.general.Background; import com.fr.general.Background;
/** /**
@ -20,7 +17,6 @@ public class BackgroundJComponent extends JComponent {
protected Background background ; protected Background background ;
public BackgroundJComponent() { public BackgroundJComponent() {
this.setBorder(new UIRoundedBorder(Color.decode("#999999"), 2, 2));
} }
public BackgroundJComponent(Background background) { public BackgroundJComponent(Background background) {
@ -37,7 +33,6 @@ public class BackgroundJComponent extends JComponent {
} }
public void setEmptyBackground() { public void setEmptyBackground() {
this.background = null; this.background = null;
} }

Loading…
Cancel
Save