source: java-rpg-client/gamegui/Menu.java@ f0f2ead

Last change on this file since f0f2ead was 55522be, checked in by dportnoy <dmp1488@…>, 17 years ago

[svn r8]

  • Property mode set to 100644
File size: 3.3 KB
RevLine 
[55522be]1package gamegui;
2
3import java.awt.*;
4import java.awt.event.*;
5import java.util.*;
6
7public 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 }
93}
Note: See TracBrowser for help on using the repository browser.