ChooseClassLevelUpDialog.java 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. package org.leumasjaffe.charsheet.view.level;
  2. import javax.swing.JPanel;
  3. import org.leumasjaffe.charsheet.model.DDCharacter;
  4. import org.leumasjaffe.charsheet.model.DDCharacterClass;
  5. import com.fasterxml.jackson.core.JsonParseException;
  6. import com.fasterxml.jackson.core.JsonProcessingException;
  7. import com.fasterxml.jackson.databind.JsonMappingException;
  8. import com.fasterxml.jackson.databind.ObjectMapper;
  9. import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
  10. import lombok.SneakyThrows;
  11. import java.awt.GridBagLayout;
  12. import javax.swing.JComboBox;
  13. import java.awt.GridBagConstraints;
  14. import javax.swing.JLabel;
  15. import java.awt.Insets;
  16. import java.io.IOException;
  17. import java.util.function.Consumer;
  18. import javax.swing.JButton;
  19. @SuppressWarnings("serial")
  20. class ChooseClassLevelUpDialog extends JPanel {
  21. public ChooseClassLevelUpDialog(DDCharacter chara, Consumer<LevelUpClassInfo> nexter) {
  22. GridBagLayout gridBagLayout = new GridBagLayout();
  23. gridBagLayout.columnWidths = new int[]{0, 0, 0, 0};
  24. gridBagLayout.rowHeights = new int[]{0, 0, 0, 0};
  25. gridBagLayout.columnWeights = new double[]{0.0, 0.0, 1.0, Double.MIN_VALUE};
  26. gridBagLayout.rowWeights = new double[]{0.0, 0.0, 1.0, Double.MIN_VALUE};
  27. setLayout(gridBagLayout);
  28. JLabel lblClass = new JLabel("Class:");
  29. GridBagConstraints gbc_lblClass = new GridBagConstraints();
  30. gbc_lblClass.insets = new Insets(0, 0, 5, 5);
  31. gbc_lblClass.anchor = GridBagConstraints.EAST;
  32. gbc_lblClass.gridx = 1;
  33. gbc_lblClass.gridy = 1;
  34. add(lblClass, gbc_lblClass);
  35. String[] choices = chara.getClasses().stream()
  36. .map(DDCharacterClass::getName).toArray(String[]::new);
  37. JComboBox<String> comboBox = new JComboBox<>(choices);
  38. comboBox.setEditable(true);
  39. GridBagConstraints gbc_comboBox = new GridBagConstraints();
  40. gbc_comboBox.insets = new Insets(0, 0, 5, 0);
  41. gbc_comboBox.fill = GridBagConstraints.HORIZONTAL;
  42. gbc_comboBox.gridx = 2;
  43. gbc_comboBox.gridy = 1;
  44. add(comboBox, gbc_comboBox);
  45. JPanel panel = new JPanel();
  46. GridBagConstraints gbc_panel = new GridBagConstraints();
  47. gbc_panel.gridwidth = 2;
  48. gbc_panel.insets = new Insets(0, 0, 0, 5);
  49. gbc_panel.fill = GridBagConstraints.BOTH;
  50. gbc_panel.gridx = 1;
  51. gbc_panel.gridy = 2;
  52. add(panel, gbc_panel);
  53. GridBagLayout gbl_panel = new GridBagLayout();
  54. gbl_panel.columnWidths = new int[]{0, 0, 0};
  55. gbl_panel.rowHeights = new int[]{0, 0};
  56. gbl_panel.columnWeights = new double[]{1.0, 0.0, Double.MIN_VALUE};
  57. gbl_panel.rowWeights = new double[]{0.0, Double.MIN_VALUE};
  58. panel.setLayout(gbl_panel);
  59. JButton btnNext = new JButton("Next");
  60. GridBagConstraints gbc_btnNext = new GridBagConstraints();
  61. gbc_btnNext.gridx = 1;
  62. gbc_btnNext.gridy = 0;
  63. panel.add(btnNext, gbc_btnNext);
  64. btnNext.addActionListener(e -> {
  65. final String name = (String) comboBox.getSelectedItem();
  66. final LevelUpClassInfo info = chara.getClasses().stream()
  67. .filter(c -> c.getName().equals(name)).findFirst()
  68. .map(dch -> new LevelUpClassInfo(chara, clone(dch), dch.getLevel().value() + 1))
  69. .orElseGet(() -> new LevelUpClassInfo(chara, new DDCharacterClass(name)));
  70. nexter.accept(info);
  71. });
  72. }
  73. static ObjectMapper mapper = new ObjectMapper();
  74. static {
  75. mapper.registerModule(new Jdk8Module());
  76. }
  77. @SneakyThrows({JsonParseException.class, JsonMappingException.class, JsonProcessingException.class, IOException.class})
  78. private DDCharacterClass clone(DDCharacterClass dch) {
  79. final String data = mapper.writeValueAsString(dch);
  80. // System.out.println(data);
  81. return mapper.readValue(data, DDCharacterClass.class);
  82. }
  83. }