/
kkkk6yxxxx
/
Lab02_Army
Обзор
Документация
Войти
/
kkkk6yxxxx
/
Lab02_Army
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
1
CI/CD
Аналитика
Безопасность
master
GUI.java
374 строки
16 KB
kkkk6yxxxx
upload files
25 авг 2025, 17:27
25 авг 2025, 17:27
f19e68e
Код
Авторство
О чём код?
package com.mephi.b23902.kts; import com.mephi.b23902.kts.OrkConstructor.MBuilder; import com.mephi.b23902.kts.OrkConstructor.Ork; import com.mephi.b23902.kts.OrkConstructor.OrkDirector; import com.mephi.b23902.kts.OrkFactory.DGBuilderFactory; import com.mephi.b23902.kts.OrkFactory.GMBuilderFactory; import com.mephi.b23902.kts.OrkFactory.MBuilderFactory; import com.mephi.b23902.kts.OrkFactory.MMBuilderFactory; import javax.swing.*; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.TreePath; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.HashMap; import java.util.Map; import java.util.Objects; import static javax.swing.WindowConstants.EXIT_ON_CLOSE; public class GUI { private OrkDirector orkDirector = new OrkDirector(); private Map<String, Ork> orksMap = new HashMap<>(); // Для хранения созданных орков public void start() { String[] usersChoice = new String[2]; JFrame mainFrame = new JFrame("Army"); mainFrame.setLayout(new BorderLayout()); DefaultMutableTreeNode root = new DefaultMutableTreeNode("Ork's Army"); DefaultMutableTreeNode MArmy = new DefaultMutableTreeNode("Mordor's Army"); DefaultMutableTreeNode DGArmy = new DefaultMutableTreeNode("Dol Gur's Army"); DefaultMutableTreeNode MMArmy = new DefaultMutableTreeNode("Misty Mountain's Army"); DefaultMutableTreeNode GMArmy = new DefaultMutableTreeNode("Gray Mountain's Army"); // Панель для отображения деталей орка JPanel detailsPanel = new JPanel(new BorderLayout()); detailsPanel.add(new JLabel("Выберите орка в дереве", SwingConstants.CENTER), BorderLayout.CENTER); // Создаем дерево JTree tree = new JTree(root); root.add(MArmy); root.add(DGArmy); root.add(MMArmy); root.add(GMArmy); // Разделитель для дерева и панели с деталями JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, new JScrollPane(tree), detailsPanel); splitPane.setDividerLocation(250); mainFrame.add(splitPane, BorderLayout.CENTER); // Обработчик выбора узла в дереве tree.addTreeSelectionListener(e -> { DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent(); if (selectedNode != null && !selectedNode.isRoot() && selectedNode.getLevel() > 1) { String orkName = selectedNode.toString(); Ork selectedOrk = orksMap.get(orkName); if (selectedOrk != null) { detailsPanel.removeAll(); detailsPanel.add(showOrkPanel(selectedOrk)); detailsPanel.revalidate(); detailsPanel.repaint(); } } }); // Панель с кнопками JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); buttonPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 0)); JButton tribeButton = new JButton("Choose tribe"); JButton roleButton = new JButton("Choose role"); JButton createButton = new JButton("Create"); createButton.setVisible(false); buttonPanel.add(tribeButton); buttonPanel.add(roleButton); buttonPanel.add(createButton); JPopupMenu tribesChooser = new JPopupMenu(); String[] tribesList = {"Mordor", "Dol Gur", "Misty Mountains", "Gray Mountains"}; for (String choose : tribesList) { JMenuItem tribeMenu = new JMenuItem(choose); tribeMenu.addActionListener(e -> { tribeButton.setText("You choose: " + choose); if (!roleButton.getText().equalsIgnoreCase("Choose role")) { createButton.setVisible(true); } usersChoice[0] = choose; }); tribesChooser.add(tribeMenu); } JPopupMenu roleChooser = new JPopupMenu(); String[] rolesList = {"Basic", "Leader", "Scout"}; for (String choose : rolesList) { JMenuItem roleMenu = new JMenuItem(choose); roleMenu.addActionListener(e -> { roleButton.setText("You choose: " + choose); if (!tribeButton.getText().equalsIgnoreCase("Choose tribe")) { createButton.setVisible(true); } usersChoice[1] = choose; }); roleChooser.add(roleMenu); } tribeButton.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { tribesChooser.show(tribeButton, 0, tribeButton.getHeight()); } }); roleButton.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { roleChooser.show(roleButton, 0, roleButton.getHeight()); } }); createButton.addActionListener(e -> { Ork newOrk = null; DefaultMutableTreeNode parentNode = null; if (usersChoice[0].equalsIgnoreCase("Mordor")) { newOrk = addMOrk(usersChoice[1]); parentNode = MArmy; } else if (usersChoice[0].equalsIgnoreCase("Dol Gur")) { newOrk = addDGOrk(usersChoice[1]); parentNode = DGArmy; } else if (usersChoice[0].equalsIgnoreCase("Misty Mountains")) { newOrk = addMMOrk(usersChoice[1]); parentNode = MMArmy; } else if (usersChoice[0].equalsIgnoreCase("Gray Mountains")) { System.out.println("oooooooooooooooooooooooooooooooooooopaaaaaaaaaaaaaaaaaaa"); newOrk = addGMOrk(usersChoice[1]); parentNode = GMArmy; } if (newOrk != null) { DefaultMutableTreeNode node = new DefaultMutableTreeNode(newOrk.getName()); parentNode.add(node); orksMap.put(newOrk.getName(), newOrk); // Разворачиваем дерево, чтобы показать новый узел tree.expandPath(new TreePath(parentNode.getPath())); tree.updateUI(); JOptionPane.showMessageDialog(mainFrame, "Создан орк:\nПлемя: " + usersChoice[0] + "\nРоль: " + usersChoice[1] + "\nИмя: " + newOrk.getName()); } }); mainFrame.add(buttonPanel, BorderLayout.SOUTH); mainFrame.setSize(800, 700); mainFrame.setDefaultCloseOperation(EXIT_ON_CLOSE); mainFrame.setVisible(true); } public Ork addMOrk(String role) { orkDirector.setOrkBuilder(new MBuilderFactory().createOrkBuilder()); if (role.equalsIgnoreCase("Basic")) { orkDirector.constructBasicOrk(); return orkDirector.getOrk(); } if (role.equalsIgnoreCase("Leader")) { orkDirector.constructLeaderOrk(); return orkDirector.getOrk(); } else { orkDirector.constructScoutOrk(); return orkDirector.getOrk(); } } public Ork addDGOrk(String role) { orkDirector.setOrkBuilder(new DGBuilderFactory().createOrkBuilder()); if (role.equalsIgnoreCase("Basic")) { orkDirector.constructBasicOrk(); return orkDirector.getOrk(); } if (role.equalsIgnoreCase("Leader")) { orkDirector.constructLeaderOrk(); return orkDirector.getOrk(); } else { orkDirector.constructScoutOrk(); return orkDirector.getOrk(); } } public Ork addMMOrk(String role) { orkDirector.setOrkBuilder(new MMBuilderFactory().createOrkBuilder()); if (role.equalsIgnoreCase("Basic")) { orkDirector.constructBasicOrk(); return orkDirector.getOrk(); } if (role.equalsIgnoreCase("Leader")) { orkDirector.constructLeaderOrk(); return orkDirector.getOrk(); } else { orkDirector.constructScoutOrk(); return orkDirector.getOrk(); } } public Ork addGMOrk(String role){ orkDirector.setOrkBuilder(new GMBuilderFactory().createOrkBuilder()); if (role.equalsIgnoreCase("Basic")) { orkDirector.constructBasicOrk(); System.out.println("oshipkaaaaaaaaaaaa111111111111"); return orkDirector.getOrk(); } if (role.equalsIgnoreCase("Leader")) { orkDirector.constructLeaderOrk(); return orkDirector.getOrk(); } else { orkDirector.constructScoutOrk(); return orkDirector.getOrk(); } } public JPanel showOrkPanel(Ork ork) { JPanel outputPanel = new JPanel(new BorderLayout(10, 10)); outputPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); //выбор фотки //выбор фотки if(ork.getTribe() == "Mordor"){ if (ork.getRole() == "Basic"){ ImageIcon image = new ImageIcon("B.jpg"); JLabel imageLabel = new JLabel(image); imageLabel.setHorizontalAlignment(JLabel.CENTER); outputPanel.add(imageLabel, BorderLayout.NORTH); } else if (ork.getRole() == "Scout"){ ImageIcon image = new ImageIcon("SM.jpg"); JLabel imageLabel = new JLabel(image); imageLabel.setHorizontalAlignment(JLabel.CENTER); outputPanel.add(imageLabel, BorderLayout.NORTH); } else{ ImageIcon image = new ImageIcon("LM.jpg"); JLabel imageLabel = new JLabel(image); imageLabel.setHorizontalAlignment(JLabel.CENTER); outputPanel.add(imageLabel, BorderLayout.NORTH); } } else if(ork.getTribe() == "Dol Gur"){ if (ork.getRole() == "Basic"){ ImageIcon image = new ImageIcon("BDG.jpg"); JLabel imageLabel = new JLabel(image); imageLabel.setHorizontalAlignment(JLabel.CENTER); outputPanel.add(imageLabel, BorderLayout.NORTH); } else if (ork.getRole() == "Scout"){ ImageIcon image = new ImageIcon("SDG.jpg"); JLabel imageLabel = new JLabel(image); imageLabel.setHorizontalAlignment(JLabel.CENTER); outputPanel.add(imageLabel, BorderLayout.NORTH); } else{ ImageIcon image = new ImageIcon("LDG.jpg"); JLabel imageLabel = new JLabel(image); imageLabel.setHorizontalAlignment(JLabel.CENTER); outputPanel.add(imageLabel, BorderLayout.NORTH); } } else if(ork.getTribe() == "Misty Mountains"){ if (ork.getRole() == "Basic"){ ImageIcon image = new ImageIcon("BMM.jpg"); JLabel imageLabel = new JLabel(image); imageLabel.setHorizontalAlignment(JLabel.CENTER); outputPanel.add(imageLabel, BorderLayout.NORTH); } else if (ork.getRole() == "Scout"){ ImageIcon image = new ImageIcon("SMM.jpg"); JLabel imageLabel = new JLabel(image); imageLabel.setHorizontalAlignment(JLabel.CENTER); outputPanel.add(imageLabel, BorderLayout.NORTH); } else{ ImageIcon image = new ImageIcon("LMM.jpg"); JLabel imageLabel = new JLabel(image); imageLabel.setHorizontalAlignment(JLabel.CENTER); outputPanel.add(imageLabel, BorderLayout.NORTH); } } // else if(ork.getTribe() == "Gray Mountains"){ else{ if (ork.getRole() == "Basic"){ System.out.println("oshipkaaaa"); ImageIcon image = new ImageIcon("BGM.jpg"); JLabel imageLabel = new JLabel(image); imageLabel.setHorizontalAlignment(JLabel.CENTER); outputPanel.add(imageLabel, BorderLayout.NORTH); } else if (ork.getRole() == "Scout"){ ImageIcon image = new ImageIcon("SGM.jpg"); JLabel imageLabel = new JLabel(image); imageLabel.setHorizontalAlignment(JLabel.CENTER); outputPanel.add(imageLabel, BorderLayout.NORTH); } else{ ImageIcon image = new ImageIcon("LGM.jpg"); JLabel imageLabel = new JLabel(image); imageLabel.setHorizontalAlignment(JLabel.CENTER); outputPanel.add(imageLabel, BorderLayout.NORTH); } } JPanel centerPanel = new JPanel(); centerPanel.setLayout(new BoxLayout(centerPanel, BoxLayout.Y_AXIS)); JPanel progressBarsPanel = new JPanel(new GridLayout(4, 1, 5, 5)); progressBarsPanel.setBorder(BorderFactory.createTitledBorder("Attributes")); JProgressBar strengthBar = new JProgressBar(1, 100); strengthBar.setValue(ork.getStrength()); strengthBar.setString("Strength: " + ork.getStrength()); strengthBar.setStringPainted(true); progressBarsPanel.add(strengthBar); JProgressBar agilityBar = new JProgressBar(1, 100); agilityBar.setValue(ork.getAgility()); agilityBar.setString("Agility: " + ork.getAgility()); agilityBar.setStringPainted(true); progressBarsPanel.add(agilityBar); JProgressBar intelligenceBar = new JProgressBar(1, 50); intelligenceBar.setValue(ork.getIntelligence()); intelligenceBar.setString("Intelligence: " + ork.getIntelligence()); intelligenceBar.setStringPainted(true); progressBarsPanel.add(intelligenceBar); JProgressBar healthBar = new JProgressBar(50, 200); healthBar.setValue(ork.getHealth()); healthBar.setString("Health: " + ork.getHealth()); healthBar.setStringPainted(true); progressBarsPanel.add(healthBar); centerPanel.add(progressBarsPanel); centerPanel.add(Box.createVerticalStrut(10)); JTextArea orkDescription = new JTextArea(5, 20); orkDescription.setText("Tribe: " + ork.getTribe() + "\n" + "Name: " + ork.getName() + "\n" + "Role: " + ork.getRole() + "\n" + "Weapon: " + ork.getWeapon().getName() + "\n" + "Armor: " + ork.getArmor().getName() + "\n" + "Banner: " + ork.getBanner().getName()); orkDescription.setEditable(false); orkDescription.setLineWrap(true); orkDescription.setWrapStyleWord(true); JScrollPane scrollPane = new JScrollPane(orkDescription); scrollPane.setBorder(BorderFactory.createTitledBorder("Description")); centerPanel.add(scrollPane); outputPanel.add(centerPanel, BorderLayout.CENTER); return outputPanel; } public static void main(String[] args){ GUI gui = new GUI(); gui.start(); } }