• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

jiangxincode / ApkToolBoxGUI / #1205

13 Sep 2025 09:56AM UTC coverage: 2.901%. Remained the same
#1205

push

jiangxincode
fix #568: 可序列化类xxx没有 serialVersionUID 的定义

248 of 8548 relevant lines covered (2.9%)

0.03 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/main/java/edu/jiangxin/apktoolbox/convert/relationship/RelationShipConvertPanel.java
1
package edu.jiangxin.apktoolbox.convert.relationship;
2

3
import edu.jiangxin.apktoolbox.swing.extend.EasyPanel;
4
import org.apache.commons.lang3.StringUtils;
5

6
import javax.swing.*;
7
import java.awt.*;
8
import java.awt.event.ActionEvent;
9
import java.awt.event.ActionListener;
10
import java.io.Serial;
11
import java.util.HashMap;
12
import java.util.Map;
13
import java.util.Stack;
14

15
public class RelationShipConvertPanel extends EasyPanel {
×
16
    @Serial
17
    private static final long serialVersionUID = 1L;
18

19
    private static final Map<String, Map<String, String>> dataMap = new HashMap<>();
×
20

21
    private String now = "你";
×
22

23
    private JTextField inputTextField;
24
    private JTextField outputTextField;
25

26
    private final Stack<String> stack = new Stack<>();
×
27

28
    static {
29
        dataMap.put("不存在", Map.of("父", "不存在", "母", "不存在", "兄", "不存在", "弟", "不存在", "姐", "不存在", "妹", "不存在", "夫", "不存在", "妻", "不存在", "儿", "不存在", "女", "不存在"));
×
30
        dataMap.put("你", Map.of("父", "爸爸", "母", "妈妈", "兄", "哥哥", "弟", "弟弟", "姐", "姐姐", "妹", "妹妹", "夫", "老公", "妻", "老婆", "儿", "儿子", "女", "女儿"));
×
31
        dataMap.put("爸爸", Map.of("父", "爷爷", "母", "奶奶", "兄", "伯伯", "弟", "叔叔", "姐", "姑姑", "妹", "姑姑", "夫", "不存在", "妻", "妈妈", "儿", "<哥哥><弟弟>", "女", "<姐姐><妹妹>"));
×
32
        dataMap.put("妈妈", Map.of("父", "姥爷", "母", "姥姥", "兄", "舅舅", "弟", "舅舅", "姐", "大姨", "妹", "小姨", "夫", "爸爸", "妻", "不存在", "儿", "<哥哥><弟弟>", "女", "<姐姐><妹妹>"));
×
33
        dataMap.put("哥哥", Map.of("父", "爸爸", "母", "妈妈", "兄", "哥哥", "弟", "<哥哥><弟弟>", "姐", "姐姐", "妹", "<姐姐><妹妹>", "夫", "不存在", "妻", "嫂子", "儿", "侄子", "女", "侄女"));
×
34
        dataMap.put("弟弟", Map.of("父", "爸爸", "母", "妈妈", "兄", "<哥哥><弟弟>", "弟", "弟弟", "姐", "<姐姐><妹妹>", "妹", "妹妹", "夫", "不存在", "妻", "弟媳", "儿", "侄子", "女", "侄女"));
×
35
        dataMap.put("姐姐", Map.of("父", "爸爸", "母", "妈妈", "兄", "哥哥", "弟", "<哥哥><弟弟>", "姐", "姐姐", "妹", "<姐姐><妹妹>", "夫", "姐夫", "妻", "不存在", "儿", "外甥", "女", "外甥女"));
×
36
        dataMap.put("妹妹", Map.of("父", "爸爸", "母", "妈妈", "兄", "<哥哥><弟弟>", "弟", "弟弟", "姐", "<姐姐><妹妹>", "妹", "妹妹", "夫", "妹夫", "妻", "不存在", "儿", "外甥", "女", "外甥女"));
×
37
        dataMap.put("老婆", Map.of("父", "岳父", "母", "岳母", "兄", "大舅", "弟", "小舅", "姐", "大姨", "妹", "小姨", "夫", "你", "妻", "不存在", "儿", "儿子", "女", "女儿"));
×
38
        dataMap.put("儿子", Map.of("父", "你", "母", "老婆", "兄", "儿子", "弟", "儿子", "姐", "女儿", "妹", "女儿", "夫", "不存在", "妻", "儿媳", "儿", "孙子", "女", "孙女"));
×
39
        dataMap.put("女儿", Map.of("父", "你", "母", "老婆", "兄", "儿子", "弟", "儿子", "姐", "女儿", "妹", "女儿", "夫", "女婿", "妻", "不存在", "儿", "外孙", "女", "外孙女"));
×
40
        dataMap.put("伯伯", Map.of("父", "爷爷", "母", "奶奶", "兄", "伯伯", "弟", "<伯伯><叔叔>", "姐", "姑姑", "妹", "姑姑", "夫", "不存在", "妻", "婶婶", "儿", "<哥哥><弟弟>", "女", "<姐姐><妹妹>"));
×
41
        dataMap.put("叔叔", Map.of("父", "爷爷", "母", "奶奶", "兄", "<伯伯><叔叔>", "弟", "叔叔", "姐", "姑姑", "妹", "姑姑", "夫", "不存在", "妻", "婶婶", "儿", "<哥哥><弟弟>", "女", "<姐姐><妹妹>"));
×
42
        dataMap.put("姑姑", Map.of("父", "爷爷", "母", "奶奶", "兄", "<伯伯><叔叔>", "弟", "<伯伯><叔叔>", "姐", "姑姑", "妹", "姑姑", "夫", "姑父", "妻", "不存在", "儿", "<哥哥><弟弟>", "女", "<姐姐><妹妹>"));
×
43
        dataMap.put("岳父", Map.of("父", "爷爷", "母", "奶奶", "兄", "伯伯", "弟", "叔叔", "姐", "姑姑", "妹", "姑姑", "夫", "不存在", "妻", "岳母", "儿", "<哥哥><弟弟>", "女", "<姐姐><妹妹>"));
×
44
        dataMap.put("岳母", Map.of("父", "姥爷", "母", "姥姥", "兄", "舅舅", "弟", "舅舅", "姐", "大姨", "妹", "小姨", "夫", "岳父", "妻", "不存在", "儿", "<哥哥><弟弟>", "女", "<姐姐><妹妹>"));
×
45
    }
×
46

47
    @Override
48
    public void initUI() {
49
        setLayout(new GridBagLayout());
×
50
        GridBagConstraints gbc = new GridBagConstraints();
×
51

52
        inputTextField = new MyTextField();
×
53

54
        gbc.insets = new Insets(5, 5, 5, 5);
×
55
        gbc.gridx = 0;
×
56
        gbc.gridy = 0;
×
57
        gbc.gridwidth = 4;
×
58
        gbc.fill = GridBagConstraints.HORIZONTAL;
×
59
        add(inputTextField, gbc);
×
60

61
        outputTextField = new MyTextField();
×
62
        outputTextField.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
×
63

64
        gbc.gridy = 1;
×
65
        add(outputTextField, gbc);
×
66

67
        ButtonListener btnListener = new ButtonListener();
×
68

69
        JButton fatherButton = new MyButton("父");
×
70
        fatherButton.addActionListener(btnListener);
×
71

72
        gbc.gridx = 0;
×
73
        gbc.gridy = 2;
×
74
        gbc.gridwidth = 1;
×
75
        add(fatherButton, gbc);
×
76

77
        JButton motherButton = new MyButton("母");
×
78
        motherButton.addActionListener(btnListener);
×
79

80
        gbc.gridx = 1;
×
81
        add(motherButton, gbc);
×
82

83
        JButton backButton = new MyButton("←");
×
84
        backButton.addActionListener(btnListener);
×
85

86
        gbc.gridx = 2;
×
87
        add(backButton, gbc);
×
88

89
        JButton acButton = new MyButton("AC");
×
90
        acButton.addActionListener(btnListener);
×
91

92
        gbc.gridx = 3;
×
93
        add(acButton, gbc);
×
94

95
        JButton brotherButton = new MyButton("兄");
×
96
        brotherButton.addActionListener(btnListener);
×
97

98
        gbc.gridx = 0;
×
99
        gbc.gridy = 3;
×
100
        add(brotherButton, gbc);
×
101

102
        JButton littleBrotherButton = new MyButton("弟");
×
103
        littleBrotherButton.addActionListener(btnListener);
×
104

105
        gbc.gridx = 1;
×
106
        add(littleBrotherButton, gbc);
×
107

108
        JButton husbandButton = new MyButton("夫");
×
109
        husbandButton.addActionListener(btnListener);
×
110

111
        gbc.gridx = 2;
×
112
        add(husbandButton, gbc);
×
113

114
        JButton obligateButton = new MyButton(" ");
×
115
        obligateButton.setEnabled(false);
×
116

117
        gbc.gridx = 3;
×
118
        add(obligateButton, gbc);
×
119

120
        JButton sisterButton = new MyButton("姐");
×
121
        sisterButton.addActionListener(btnListener);
×
122

123
        gbc.gridx = 0;
×
124
        gbc.gridy = 4;
×
125
        add(sisterButton, gbc);
×
126

127
        JButton littleSisterButton = new MyButton("妹");
×
128
        littleSisterButton.addActionListener(btnListener);
×
129

130
        gbc.gridx = 1;
×
131
        add(littleSisterButton, gbc);
×
132

133
        JButton wifeButton = new MyButton("妻");
×
134
        wifeButton.addActionListener(btnListener);
×
135

136
        gbc.gridx = 2;
×
137
        add(wifeButton, gbc);
×
138

139
        JButton deButton = new MyButton("的");
×
140
        deButton.addActionListener(btnListener);
×
141

142
        gbc.gridx = 3;
×
143
        add(deButton, gbc);
×
144

145
        JButton sonButton = new MyButton("儿");
×
146
        sonButton.addActionListener(btnListener);
×
147

148
        gbc.gridx = 0;
×
149
        gbc.gridy = 5;
×
150
        add(sonButton, gbc);
×
151

152
        JButton daughterbButton = new MyButton("女");
×
153
        daughterbButton.addActionListener(btnListener);
×
154

155
        gbc.gridx = 1;
×
156
        add(daughterbButton, gbc);
×
157

158
        JButton resultButton = new MyButton("=");
×
159
        resultButton.addActionListener(btnListener);
×
160

161
        gbc.gridx = 2;
×
162
        gbc.gridwidth = 2;
×
163
        add(resultButton, gbc);
×
164
    }
×
165

166
    static class MyTextField extends JTextField {
167
        @Serial
168
        private static final long serialVersionUID = 1L;
169

170
        public MyTextField() {
171
            super();
×
172
            Font font = new Font("宋体", Font.BOLD, 15);
×
173
            setFont(font);
×
174
            setEditable(false);
×
175
        }
×
176
    }
177

178
    static class MyButton extends JButton {
179
        @Serial
180
        private static final long serialVersionUID = 1L;
181

182
        public MyButton(String text) {
183
            super(text);
×
184
            Font font = new Font("宋体", Font.BOLD, 30);
×
185
            setFont(font);
×
186
        }
×
187
    }
188

189
    class ButtonListener implements ActionListener {
×
190
        public void actionPerformed(ActionEvent e) {
191
            String which = ((JButton) e.getSource()).getText();
×
192
            switch (which) {
×
193
                case "AC" -> {
194
                    now = "你";
×
195
                    inputTextField.setText("");
×
196
                    outputTextField.setText("");
×
197
                }
×
198
                case "=" -> outputTextField.setText(now);
×
199
                case "←" -> {
200
                    String inputText = inputTextField.getText();
×
201
                    String removedText = null;
×
202
                    if (inputText != null && inputText.length() >= 1) {
×
203
                        inputTextField.setText(inputText.substring(0, inputText.length() - 1));
×
204
                        removedText = inputText.substring(inputText.length() - 1);
×
205
                    }
206
                    if (!stack.isEmpty() && isRelationString(removedText)) {
×
207
                        now = stack.pop();
×
208
                        outputTextField.setText(now);
×
209
                    }
210
                }
×
211
                case "的" -> inputTextField.setText(inputTextField.getText() + which);
×
212
                default -> {
213
                    inputTextField.setText(inputTextField.getText() + which);
×
214
                    stack.push(now);
×
215
                    String result = getRelation(now, which);
×
216
                    if (isPossibleRelation(result)) {
×
217
                        result = getExactRelation(result);
×
218
                    }
219
                    if (result != null) {
×
220
                        now = result;
×
221
                        outputTextField.setText(now);
×
222
                    } else {
223
                        outputTextField.setText("超出计算范围");
×
224
                    }
225
                }
226
            }
227
        }
×
228
    }
229

230
    private static boolean isRelationString(String relationString) {
231
        return relationString != null && "父母兄弟姐妹夫妻儿女".contains(relationString);
×
232
    }
233

234
    private static String getRelation(String now, String what) {
235
        Map<String, String> relationsMap = dataMap.get(now);
×
236
        if (relationsMap == null) {
×
237
            return null;
×
238
        }
239
        return relationsMap.get(what);
×
240
    }
241

242
    private static boolean isPossibleRelation(String possibleRelation) {
243
        return possibleRelation != null && possibleRelation.charAt(0) == '<';
×
244
    }
245

246
    private static String getExactRelation(String possibleRelation) {
247
        String[] tmp = StringUtils.substringsBetween(possibleRelation, "<", ">");
×
248
        if (tmp != null && tmp.length == 2) {
×
249
            String message = "是否比";
×
250
            if ("伯伯".equals(tmp[0])) {
×
251
                message += "爸爸";
×
252
            } else if ("姐姐".equals(tmp[0]) || "哥哥".equals(tmp[0])) {
×
253
                message += "你";
×
254
            }
255
            message += "大?";
×
256
            int userChoose = JOptionPane.showConfirmDialog(null, message, "提示", JOptionPane.YES_NO_OPTION);
×
257
            boolean isOlder = userChoose == JOptionPane.YES_OPTION;
×
258
            return isOlder ? tmp[0] : tmp[1];
×
259
        } else {
260
            return null;
×
261
        }
262
    }
263
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc