package org.leumasjaffe.charsheet.view.summary; import javax.swing.JPanel; import javax.swing.JLabel; import java.awt.Color; import java.awt.Font; import javax.swing.border.LineBorder; import org.leumasjaffe.charsheet.model.Ability; import org.leumasjaffe.charsheet.model.observable.IntValue; import lombok.AccessLevel; import lombok.experimental.FieldDefaults; import java.awt.GridBagLayout; import java.util.function.Function; import java.awt.GridBagConstraints; import java.awt.Dimension; import javax.swing.SwingConstants; @FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true) public class AbilityLine extends JPanel { /** * */ private static final long serialVersionUID = 1L; Function access; AbilityBox ability; AbilityBox temporary; public AbilityLine(final String name, Function func) { this.access = func; setMaximumSize(new Dimension(220, 26)); setMinimumSize(new Dimension(220, 26)); setPreferredSize(new Dimension(220, 26)); GridBagLayout gridBagLayout = new GridBagLayout(); gridBagLayout.columnWidths = new int[]{50, 70, 70, 0}; gridBagLayout.rowHeights = new int[]{26, 0}; gridBagLayout.columnWeights = new double[]{0.0, 0.0, 0.0, Double.MIN_VALUE}; gridBagLayout.rowWeights = new double[]{0.0, Double.MIN_VALUE}; setLayout(gridBagLayout); JLabel title = new JLabel(name.toUpperCase()); title.setHorizontalAlignment(SwingConstants.CENTER); title.setForeground(Color.WHITE); title.setOpaque(true); title.setMaximumSize(new Dimension(50, 25)); title.setMinimumSize(new Dimension(50, 25)); title.setPreferredSize(new Dimension(50, 25)); title.setBorder(new LineBorder(Color.WHITE)); title.setFont(new Font("Tahoma", Font.BOLD, 18)); title.setBackground(Color.BLACK); GridBagConstraints gbc_title = new GridBagConstraints(); gbc_title.fill = GridBagConstraints.HORIZONTAL; gbc_title.gridx = 0; gbc_title.gridy = 0; add(title, gbc_title); ability = new AbilityBox(name, "Ability"); GridBagConstraints gbc_ability = new GridBagConstraints(); gbc_ability.fill = GridBagConstraints.HORIZONTAL; gbc_ability.gridx = 1; gbc_ability.gridy = 0; add(ability, gbc_ability); temporary = new AbilityBox(name, "Temporary"); temporary.setOpaque(true); temporary.setBackground(Color.LIGHT_GRAY); GridBagConstraints gbc_temporary = new GridBagConstraints(); gbc_temporary.fill = GridBagConstraints.HORIZONTAL; gbc_temporary.gridx = 2; gbc_temporary.gridy = 0; add(temporary, gbc_temporary); } public void setModel(Ability model) { this.ability.setModel(access.apply(model.getBase())); this.temporary.setModel(access.apply(model.getTemp())); } }