1 | package gamegui;
|
---|
2 |
|
---|
3 | import java.awt.*;
|
---|
4 | import java.awt.event.*;
|
---|
5 | import java.awt.image.BufferedImage;
|
---|
6 | import java.util.*;
|
---|
7 |
|
---|
8 | public class ScrollList extends Member {
|
---|
9 | private ArrayList<Listable> lstObjects;
|
---|
10 | private Listable selectedItem;
|
---|
11 | private Font font;
|
---|
12 | private FontMetrics metrics;
|
---|
13 | private int textStart;
|
---|
14 | private boolean change;
|
---|
15 |
|
---|
16 | public ScrollList(String newName, int newX, int newY, int newWidth, int newHeight, Font font, FontMetrics metrics) {
|
---|
17 | super(newName, newX, newY, newWidth, newHeight);
|
---|
18 |
|
---|
19 | lstObjects = new ArrayList<Listable>();
|
---|
20 | selectedItem = null;
|
---|
21 | this.font = font;
|
---|
22 | this.metrics = metrics;
|
---|
23 | textStart = 0;
|
---|
24 | change = false;
|
---|
25 | }
|
---|
26 |
|
---|
27 | public ArrayList<Listable> getList() {
|
---|
28 | return lstObjects;
|
---|
29 | }
|
---|
30 |
|
---|
31 | public Listable getSelected() {
|
---|
32 | return selectedItem;
|
---|
33 | }
|
---|
34 |
|
---|
35 | public boolean isChanged() {
|
---|
36 | return change;
|
---|
37 | }
|
---|
38 |
|
---|
39 | public void changeHandled() {
|
---|
40 | change = false;
|
---|
41 | }
|
---|
42 |
|
---|
43 | public void deselect() {
|
---|
44 | selectedItem = null;
|
---|
45 | }
|
---|
46 |
|
---|
47 | public void clear() {
|
---|
48 | lstObjects = new ArrayList<Listable>();
|
---|
49 | selectedItem = null;
|
---|
50 | textStart = 0;
|
---|
51 | changeHandled();
|
---|
52 | }
|
---|
53 |
|
---|
54 | public boolean handleEvent(MouseEvent e) {
|
---|
55 | if(getX() < e.getX() && e.getX() < getX()+getWidth()) {
|
---|
56 | if(getY() < e.getY() && getY()-textStart+2 < e.getY() && e.getY() < getY()+getHeight() && e.getY() < getY()+lstObjects.size()*15-textStart+2) {
|
---|
57 | selectedItem = lstObjects.get((e.getY()-getY()+textStart-2)/15);
|
---|
58 | change = true;
|
---|
59 | return true;
|
---|
60 | }
|
---|
61 | }
|
---|
62 |
|
---|
63 | if(!getScrollBar().handleEvent(e))
|
---|
64 | return false;
|
---|
65 |
|
---|
66 | if(e.getY() < getY()+getScrollBar().getWidth()) {
|
---|
67 | changeTextStart(-30);
|
---|
68 | }else if(getY()+getHeight()-getScrollBar().getWidth() < e.getY()) {
|
---|
69 | changeTextStart(30);
|
---|
70 | }
|
---|
71 |
|
---|
72 | return true;
|
---|
73 | }
|
---|
74 |
|
---|
75 | private void changeTextStart(int increment) {
|
---|
76 | textStart += increment;
|
---|
77 |
|
---|
78 | if(lstObjects.size()*15+6>getHeight() && textStart >= lstObjects.size()*15+6-getHeight()) {
|
---|
79 | textStart = lstObjects.size()*15+6-getHeight();
|
---|
80 | getScrollBar().setPosition(getScrollBar().getMaxSize()-getScrollBar().getSize());
|
---|
81 | }else if(textStart < 0 || lstObjects.size()*15+6<=getHeight()) {
|
---|
82 | textStart = 0;
|
---|
83 | getScrollBar().setPosition(0);
|
---|
84 | }else
|
---|
85 | getScrollBar().setPosition(textStart*getScrollBar().getMaxSize()/(lstObjects.size()*15+6));
|
---|
86 | }
|
---|
87 |
|
---|
88 | public void draw(Graphics g) {
|
---|
89 | GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
|
---|
90 | GraphicsDevice device = env.getDefaultScreenDevice();
|
---|
91 | GraphicsConfiguration gc = device.getDefaultConfiguration();
|
---|
92 |
|
---|
93 | BufferedImage source = gc.createCompatibleImage(getWidth(), getHeight());
|
---|
94 | Graphics2D srcGraphics = source.createGraphics();
|
---|
95 |
|
---|
96 | srcGraphics.setColor(Color.green);
|
---|
97 | srcGraphics.setFont(font);
|
---|
98 |
|
---|
99 | for(int x=0; x<lstObjects.size(); x++) {
|
---|
100 | if(selectedItem != null && selectedItem.equals(lstObjects.get(x))) {
|
---|
101 | srcGraphics.setColor(Color.blue);
|
---|
102 | srcGraphics.fillRect(0, x*15-textStart+3, getWidth(), 15);
|
---|
103 | srcGraphics.setColor(Color.green);
|
---|
104 | }
|
---|
105 |
|
---|
106 | lstObjects.get(x).drawListString(5, metrics.getHeight()+x*15-textStart, srcGraphics);
|
---|
107 | }
|
---|
108 |
|
---|
109 | g.drawImage(source, getX(), getY(), null);
|
---|
110 |
|
---|
111 | g.setColor(Color.red);
|
---|
112 | g.drawRect(getX(), getY(), getWidth(), getHeight());
|
---|
113 |
|
---|
114 | if(lstObjects.size()*15+6 > getHeight())
|
---|
115 | getScrollBar().setSize(getScrollBar().getMaxSize()*getHeight()/(lstObjects.size()*15+6));
|
---|
116 | else
|
---|
117 | getScrollBar().setSize(getScrollBar().getMaxSize());
|
---|
118 |
|
---|
119 | getScrollBar().draw(g);
|
---|
120 | }
|
---|
121 | }
|
---|