|
|
@@ -0,0 +1,170 @@
|
|
|
+package com.mes.component;
|
|
|
+
|
|
|
+import javax.swing.*;
|
|
|
+import javax.swing.border.EmptyBorder;
|
|
|
+import javax.swing.border.LineBorder;
|
|
|
+import java.awt.*;
|
|
|
+import java.awt.event.ActionEvent;
|
|
|
+
|
|
|
+public class ProductTypePanel extends JPanel {
|
|
|
+
|
|
|
+ public static final String TYPE_ZJ = "ZJ";
|
|
|
+ public static final String TYPE_SJ = "SJ";
|
|
|
+
|
|
|
+ private static final Color COLOR_SELECTED = new Color(24, 144, 255);
|
|
|
+ private static final Color COLOR_BG = new Color(245, 247, 250);
|
|
|
+ private static final Color COLOR_BORDER = new Color(217, 217, 217);
|
|
|
+ private static final Color COLOR_TEXT = new Color(89, 89, 89);
|
|
|
+
|
|
|
+ private final String switchPassword;
|
|
|
+ private String result = TYPE_ZJ;
|
|
|
+ private JButton zjButton;
|
|
|
+ private JButton sjButton;
|
|
|
+ private Runnable onChangeListener;
|
|
|
+ private boolean suppressPasswordCheck = false;
|
|
|
+
|
|
|
+ public ProductTypePanel(String switchPassword) {
|
|
|
+ this.switchPassword = switchPassword;
|
|
|
+ setLayout(new GridLayout(1, 2, 12, 0));
|
|
|
+ setOpaque(false);
|
|
|
+ setBorder(BorderFactory.createCompoundBorder(
|
|
|
+ new LineBorder(COLOR_BORDER, 1, true),
|
|
|
+ new EmptyBorder(8, 10, 8, 10)
|
|
|
+ ));
|
|
|
+ setBackground(COLOR_BG);
|
|
|
+
|
|
|
+ zjButton = createTypeButton("智界", TYPE_ZJ);
|
|
|
+ sjButton = createTypeButton("尚界", TYPE_SJ);
|
|
|
+ add(zjButton);
|
|
|
+ add(sjButton);
|
|
|
+ refreshButtonStyle();
|
|
|
+ }
|
|
|
+
|
|
|
+ private JButton createTypeButton(String title, String type) {
|
|
|
+ JButton button = new JButton(title) {
|
|
|
+ @Override
|
|
|
+ protected void paintComponent(Graphics g) {
|
|
|
+ Graphics2D g2 = (Graphics2D) g.create();
|
|
|
+ g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
|
|
|
+ if (getModel().isPressed()) {
|
|
|
+ g2.setColor(COLOR_SELECTED.darker());
|
|
|
+ } else if (type.equals(result)) {
|
|
|
+ g2.setColor(isEnabled() ? COLOR_SELECTED : COLOR_SELECTED.brighter());
|
|
|
+ } else {
|
|
|
+ g2.setColor(isEnabled() ? Color.WHITE : new Color(250, 250, 250));
|
|
|
+ }
|
|
|
+ g2.fillRoundRect(0, 0, getWidth(), getHeight(), 16, 16);
|
|
|
+ g2.dispose();
|
|
|
+ super.paintComponent(g);
|
|
|
+ }
|
|
|
+ };
|
|
|
+ button.setName(type);
|
|
|
+ button.setFont(new Font("微软雅黑", Font.BOLD, 26));
|
|
|
+ button.setFocusPainted(false);
|
|
|
+ button.setBorderPainted(false);
|
|
|
+ button.setContentAreaFilled(false);
|
|
|
+ button.setPreferredSize(new Dimension(180, 52));
|
|
|
+ button.addActionListener(e -> selectType(type, e));
|
|
|
+ return button;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void selectType(String type, ActionEvent e) {
|
|
|
+ if (!isEnabled()) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (type.equals(result)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (!suppressPasswordCheck && !verifySwitchPassword()) {
|
|
|
+ refreshButtonStyle();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ result = type;
|
|
|
+ refreshButtonStyle();
|
|
|
+ if (onChangeListener != null) {
|
|
|
+ onChangeListener.run();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private boolean verifySwitchPassword() {
|
|
|
+ JPasswordField passwordField = new JPasswordField(15);
|
|
|
+ JPanel panel = new JPanel(new BorderLayout(8, 8));
|
|
|
+ panel.add(new JLabel("请输入切换密码:"), BorderLayout.NORTH);
|
|
|
+ panel.add(passwordField, BorderLayout.CENTER);
|
|
|
+
|
|
|
+ int option = JOptionPane.showConfirmDialog(
|
|
|
+ SwingUtilities.getWindowAncestor(this),
|
|
|
+ panel,
|
|
|
+ "切换生产类型",
|
|
|
+ JOptionPane.OK_CANCEL_OPTION,
|
|
|
+ JOptionPane.PLAIN_MESSAGE
|
|
|
+ );
|
|
|
+ if (option != JOptionPane.OK_OPTION) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if (!switchPassword.equals(new String(passwordField.getPassword()))) {
|
|
|
+ JOptionPane.showMessageDialog(
|
|
|
+ SwingUtilities.getWindowAncestor(this),
|
|
|
+ "密码错误,无法切换生产类型",
|
|
|
+ "提示",
|
|
|
+ JOptionPane.WARNING_MESSAGE
|
|
|
+ );
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void refreshButtonStyle() {
|
|
|
+ styleButton(zjButton, TYPE_ZJ.equals(result));
|
|
|
+ styleButton(sjButton, TYPE_SJ.equals(result));
|
|
|
+ repaint();
|
|
|
+ }
|
|
|
+
|
|
|
+ private void styleButton(JButton button, boolean selected) {
|
|
|
+ if (!button.isEnabled()) {
|
|
|
+ button.setForeground(selected ? Color.WHITE : new Color(191, 191, 191));
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (selected) {
|
|
|
+ button.setForeground(Color.WHITE);
|
|
|
+ } else {
|
|
|
+ button.setForeground(COLOR_TEXT);
|
|
|
+ }
|
|
|
+ button.repaint();
|
|
|
+ }
|
|
|
+
|
|
|
+ public void setOnChangeListener(Runnable onChangeListener) {
|
|
|
+ this.onChangeListener = onChangeListener;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void setResult(String type) {
|
|
|
+ suppressPasswordCheck = true;
|
|
|
+ try {
|
|
|
+ if (TYPE_SJ.equals(type)) {
|
|
|
+ result = TYPE_SJ;
|
|
|
+ } else {
|
|
|
+ result = TYPE_ZJ;
|
|
|
+ }
|
|
|
+ refreshButtonStyle();
|
|
|
+ } finally {
|
|
|
+ suppressPasswordCheck = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public String getResult() {
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ public String getTypeName() {
|
|
|
+ return TYPE_SJ.equals(result) ? "尚界" : "智界";
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void setEnabled(boolean enabled) {
|
|
|
+ super.setEnabled(enabled);
|
|
|
+ zjButton.setEnabled(enabled);
|
|
|
+ sjButton.setEnabled(enabled);
|
|
|
+ refreshButtonStyle();
|
|
|
+ repaint();
|
|
|
+ }
|
|
|
+}
|