Changeset 8edd04e in lost-haven for gamegui/Menu.java
- Timestamp:
- Jun 7, 2020, 3:04:32 PM (5 years ago)
- Branches:
- master
- Children:
- a49176d
- Parents:
- 155577b
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
gamegui/Menu.java
r155577b r8edd04e 1 1 package gamegui; 2 2 3 import java.awt.*; 4 import java.awt.event.*; 5 import java.util.*; 3 import java.awt.Color; 4 import java.awt.Font; 5 import java.awt.FontMetrics; 6 import java.awt.Graphics; 7 import java.awt.event.MouseEvent; 8 import java.util.ArrayList; 6 9 7 10 public class Menu extends Member { 8 private ArrayList<String> items; 9 private int selectedIndex; 10 private String label; 11 private Font font; 12 private boolean open; //determines if the menu is pulled down 13 private FontMetrics metrics; 14 15 public Menu(String newName, int newX, int newY, int newWidth, int newHeight, String newLabel, Font newFont) { 16 super(newName, newX, newY, newWidth, newHeight); 17 18 items = new ArrayList<String>(); 19 selectedIndex = -1; 20 label = newLabel; 21 font = newFont; 22 open = false; 23 } 24 25 public boolean handleEvent(MouseEvent e) { 26 if(getX()+metrics.stringWidth(label)+4 <= e.getX() && e.getX() <= getX()+getWidth() && getY()+getHeight() <= e.getY() && e.getY() <= getY()+getHeight()+15*items.size() && open) { 27 selectedIndex = (e.getY()-getY()-getHeight())/15; 28 open = false; 29 return true; 30 } 31 32 if(getX()+getWidth()-getHeight() <= e.getX() && e.getX() <= getX()+getWidth() && getY() <= e.getY() && e.getY() <= getY()+getHeight()) { 33 open = !open; 34 return true; 35 } 36 37 return false; 38 } 39 40 public void clear() { 41 if(selectedIndex != -1) 42 selectedIndex = 0; 43 } 44 45 public void draw(Graphics g) 46 { 47 metrics = g.getFontMetrics(font); 48 49 g.setColor(Color.black); 50 g.fillRect(getX(), getY(), getWidth(), getHeight()); 51 52 g.setColor(Color.red); 53 g.drawRect(getX(), getY(), getWidth(), getHeight()); 54 55 g.drawLine(getX()+metrics.stringWidth(label)+4, getY(), getX()+metrics.stringWidth(label)+4, getY()+getHeight()); 56 g.drawLine(getX()+getWidth()-getHeight(), getY(), getX()+getWidth()-getHeight(), getY()+getHeight()); 57 58 g.drawLine(getX()+getWidth()-getHeight()*17/20, getY()+getHeight()*3/20, getX()+getWidth()-getHeight()*3/20, getY()+getHeight()*3/20); 59 g.drawLine(getX()+getWidth()-getHeight()*17/20, getY()+getHeight()*3/20, getX()+getWidth()-getHeight()/2, getY()+getHeight()*17/20); 60 g.drawLine(getX()+getWidth()-getHeight()/2, getY()+getHeight()*17/20, getX()+getWidth()-getHeight()*3/20, getY()+getHeight()*3/20); 61 62 g.setColor(Color.green); 63 g.setFont(font); 64 g.drawString(label, getX()+2, getY()+(getHeight()+metrics.getHeight())/2-2); 65 g.drawString(items.get(selectedIndex), getX()+metrics.stringWidth(label)+8, getY()+(getHeight()+metrics.getHeight())/2-2); 66 67 if(open) { 68 g.setColor(Color.black); 69 g.fillRect(getX()+metrics.stringWidth(label)+4, getY()+getHeight(), getWidth()-metrics.stringWidth(label)-4, items.size()*15); 70 71 g.setColor(Color.red); 72 g.drawRect(getX()+metrics.stringWidth(label)+4, getY()+getHeight(), getWidth()-metrics.stringWidth(label)-4, items.size()*15); 73 74 if(selectedIndex != -1) { 75 g.setColor(Color.blue); 76 g.fillRect(getX()+metrics.stringWidth(label)+5, getY()+getHeight()+1+15*selectedIndex, getWidth()-metrics.stringWidth(label)-5, 14); 77 } 78 79 g.setColor(Color.green); 80 for(int x=0; x<items.size(); x++) 81 g.drawString(items.get(x), getX()+metrics.stringWidth(label)+8, getY()+(getHeight()+metrics.getHeight())/2+15*(x+1)); 82 } 83 } 84 85 public void add(String newString) { 86 selectedIndex = 0; 87 items.add(newString); 88 } 89 90 public String getSelected() { 91 return items.get(selectedIndex); 92 } 11 12 private ArrayList<String> items; 13 private int selectedIndex; 14 private String label; 15 private Font font; 16 private boolean open; 17 private FontMetrics metrics; 18 19 public Menu(String newName, int newX, int newY, int newWidth, int newHeight, String newLabel, Font newFont) { 20 super(newName, newX, newY, newWidth, newHeight); 21 this.items = new ArrayList<String>(); 22 this.selectedIndex = -1; 23 this.label = newLabel; 24 this.font = newFont; 25 this.open = false; 26 } 27 28 public boolean handleEvent(MouseEvent e) { 29 if (getX() + this.metrics.stringWidth(this.label) + 4 <= e.getX() && e.getX() <= getX() + getWidth() && getY() + getHeight() <= e.getY() && e.getY() <= getY() + getHeight() + 15 * this.items.size() && this.open) { 30 this.selectedIndex = (e.getY() - getY() - getHeight()) / 15; 31 this.open = false; 32 return true; 33 } 34 if (getX() + getWidth() - getHeight() <= e.getX() && e.getX() <= getX() + getWidth() && getY() <= e.getY() && e.getY() <= getY() + getHeight()) { 35 this.open = !this.open; 36 return true; 37 } 38 return false; 39 } 40 41 public void clear() { 42 if (this.selectedIndex != -1) 43 this.selectedIndex = 0; 44 } 45 46 public void draw(Graphics g) { 47 this.metrics = g.getFontMetrics(this.font); 48 g.setColor(Color.black); 49 g.fillRect(getX(), getY(), getWidth(), getHeight()); 50 g.setColor(Color.red); 51 g.drawRect(getX(), getY(), getWidth(), getHeight()); 52 g.drawLine(getX() + this.metrics.stringWidth(this.label) + 4, getY(), getX() + this.metrics.stringWidth(this.label) + 4, getY() + getHeight()); 53 g.drawLine(getX() + getWidth() - getHeight(), getY(), getX() + getWidth() - getHeight(), getY() + getHeight()); 54 g.drawLine(getX() + getWidth() - getHeight() * 17 / 20, getY() + getHeight() * 3 / 20, getX() + getWidth() - getHeight() * 3 / 20, getY() + getHeight() * 3 / 20); 55 g.drawLine(getX() + getWidth() - getHeight() * 17 / 20, getY() + getHeight() * 3 / 20, getX() + getWidth() - getHeight() / 2, getY() + getHeight() * 17 / 20); 56 g.drawLine(getX() + getWidth() - getHeight() / 2, getY() + getHeight() * 17 / 20, getX() + getWidth() - getHeight() * 3 / 20, getY() + getHeight() * 3 / 20); 57 g.setColor(Color.green); 58 g.setFont(this.font); 59 g.drawString(this.label, getX() + 2, getY() + (getHeight() + this.metrics.getHeight()) / 2 - 2); 60 g.drawString(this.items.get(this.selectedIndex), getX() + this.metrics.stringWidth(this.label) + 8, getY() + (getHeight() + this.metrics.getHeight()) / 2 - 2); 61 if (this.open) { 62 g.setColor(Color.black); 63 g.fillRect(getX() + this.metrics.stringWidth(this.label) + 4, getY() + getHeight(), getWidth() - this.metrics.stringWidth(this.label) - 4, this.items.size() * 15); 64 g.setColor(Color.red); 65 g.drawRect(getX() + this.metrics.stringWidth(this.label) + 4, getY() + getHeight(), getWidth() - this.metrics.stringWidth(this.label) - 4, this.items.size() * 15); 66 if (this.selectedIndex != -1) { 67 g.setColor(Color.blue); 68 g.fillRect(getX() + this.metrics.stringWidth(this.label) + 5, getY() + getHeight() + 1 + 15 * this.selectedIndex, getWidth() - this.metrics.stringWidth(this.label) - 5, 14); 69 } 70 g.setColor(Color.green); 71 for (int x = 0; x < this.items.size(); x++) 72 g.drawString(this.items.get(x), getX() + this.metrics.stringWidth(this.label) + 8, getY() + (getHeight() + this.metrics.getHeight()) / 2 + 15 * (x + 1)); 73 } 74 } 75 76 public void add(String newString) { 77 this.selectedIndex = 0; 78 this.items.add(newString); 79 } 80 81 public String getSelected() { 82 return this.items.get(this.selectedIndex); 83 } 93 84 }
Note:
See TracChangeset
for help on using the changeset viewer.