View Javadoc
1 /*** 2 * Copyright (c) 2003 held jointly by the individual authors. 3 * 4 * This library is free software; you can redistribute it and/or modify it 5 * under the terms of the GNU Lesser General Public License as published 6 * by the Free Software Foundation; either version 2.1 of the License, or 7 * (at your option) any later version. 8 * 9 * This library is distributed in the hope that it will be useful, but 10 * WITHOUT ANY WARRANTY; with out even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU Lesser General Public License for more details. 13 * 14 * You should have received a copy of the GNU Lesser General Public License 15 * along with this library; if not, write to the Free Software Foundation, 16 * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. 17 * 18 * > http://www.gnu.org/copyleft/lesser.html 19 * > http://www.opensource.org/licenses/lgpl-license.php 20 */ 21 package net.mlw.gfw.ext.card.component; 22 23 import java.awt.Color; 24 import java.awt.Dimension; 25 import java.awt.Font; 26 import java.awt.Graphics; 27 import java.awt.Image; 28 import java.awt.Panel; 29 30 import javax.swing.JDialog; 31 import javax.swing.JFrame; 32 33 import net.mlw.gfw.client.ClientContext; 34 import net.mlw.gfw.event.Event; 35 import net.mlw.gfw.event.EventHandler; 36 import net.mlw.gfw.ext.PaintUtils; 37 import net.mlw.gfw.ext.card.CardRenderer; 38 import net.mlw.gfw.ext.card.DefaultTableModel; 39 import net.mlw.gfw.ext.card.TableModel; 40 41 /*** 42 * @author Matthew L. Wilson 43 * @version $Revision: 1.8 $ $Date: 2004/06/29 20:32:56 $ 44 */ 45 public class TablePanel extends Panel 46 { 47 protected Image buffer; 48 protected Graphics b; 49 50 private final Font USER_NAME_FONT = new Font("Arial", Font.BOLD, 12); 51 52 private final CardRenderer cardRenderer; 53 private TableModel model; 54 55 private final int[] offset = { 0, 1, 2, 3 }; 56 57 /*** 58 * @param cardRenderer 59 */ 60 public TablePanel(final CardRenderer cardRenderer) 61 { 62 this(cardRenderer, new DefaultTableModel(4)); 63 } 64 65 /*** 66 * @param cardRenderer 67 */ 68 public TablePanel(final CardRenderer cardRenderer, final TableModel tableModel) 69 { 70 this.cardRenderer = cardRenderer; 71 setModel(tableModel); 72 } 73 74 /*** Sets the current view of the table. Makes your card be the one in the 75 * SOUTH. 76 * 77 * @param seat Your seat. 78 */ 79 public void setLocalView(int seat) 80 { 81 for (int i = 0; i < 4; i++) 82 { 83 offset[i] = (i + seat) % 4; 84 } 85 } 86 87 /*** 88 * @param g 89 */ 90 public void update(Graphics g) 91 { 92 paint(g); 93 } 94 95 /*** 96 * @param g 97 */ 98 public void paint(Graphics g) 99 { 100 if (buffer == null) 101 { 102 Dimension dimension = getPreferredSize(); 103 buffer = createImage((int) dimension.getWidth(), (int) dimension.getHeight()); 104 b = buffer.getGraphics(); 105 b.setColor(getBackground()); 106 b.fillRect(0, 0, (int) dimension.getWidth(), (int) dimension.getHeight()); 107 drawTable(); 108 } 109 110 g.drawImage(buffer, 0, 0, this); 111 } 112 113 public void drawTable() 114 { 115 if (buffer == null) 116 { 117 return; 118 } 119 120 int topOfSideCards = (int) ((getPreferredSize().getHeight() / 2) - (cardRenderer.getDimensionOfCard().getHeight()) / 2); 121 int leftOfMiddleCards = (int) (cardRenderer.getDimensionOfCard().getWidth() + 27); 122 123 b.setColor(Color.LIGHT_GRAY); 124 b.draw3DRect(10, 10, (int) (getPreferredSize().getWidth() - 22), (int) (getPreferredSize().getHeight() - 22), true); 125 126 if (model.getPlayersName(offset[0]) != null) 127 { 128 //Player 0 129 b.setColor(getBackground()); 130 b.fillRect( 131 (int) (getPreferredSize().getWidth() / 2) - (b.getFontMetrics().stringWidth(model.getPlayersName(offset[0])) / 2) - 5, 132 (int) (cardRenderer.getDimensionOfCard().getHeight() * 2 + 15 + b.getFontMetrics().getHeight()), 133 10 + b.getFontMetrics().stringWidth(model.getPlayersName(offset[0])), 134 b.getFontMetrics().getHeight() + 2); 135 b.setColor(getForeground()); 136 b.setFont(USER_NAME_FONT); 137 b.drawString( 138 model.getPlayersName(offset[0]), 139 (int) (getPreferredSize().getWidth() / 2) - (b.getFontMetrics().stringWidth(model.getPlayersName(offset[0])) / 2), 140 (int) (cardRenderer.getDimensionOfCard().getHeight() * 2 + 29 + b.getFontMetrics().getHeight())); 141 //Card 0 142 143 if (model.getCard(offset[0]) != null) 144 { 145 cardRenderer.render(model.getCard(offset[0]), b, this, false, leftOfMiddleCards, (int) (cardRenderer.getDimensionOfCard().getHeight() + 27)); 146 } 147 else 148 { 149 b.setColor(getBackground()); 150 b.fillRect( 151 leftOfMiddleCards, 152 (int) (cardRenderer.getDimensionOfCard().getHeight() + 27), 153 (int) cardRenderer.getDimensionOfCard().getWidth(), 154 (int) cardRenderer.getDimensionOfCard().getHeight()); 155 } 156 } 157 if (model.getPlayersName(offset[1]) != null) 158 { 159 //Player 1 160 b.setColor(getForeground()); 161 b.setFont(USER_NAME_FONT); 162 PaintUtils.drawVerticalString(b, getBackground(), model.getPlayersName(offset[1]), 8, (int) getPreferredSize().getHeight() / 2 + 5); 163 164 //Card 1 165 if (model.getCard(offset[1]) != null) 166 { 167 cardRenderer.render(model.getCard(offset[1]), b, this, false, 25, topOfSideCards); 168 } 169 else 170 { 171 b.setColor(getBackground()); 172 b.fillRect(25, topOfSideCards, (int) cardRenderer.getDimensionOfCard().getWidth(), (int) cardRenderer.getDimensionOfCard().getHeight()); 173 } 174 } 175 176 if (model.getPlayersName(offset[2]) != null) 177 { 178 //Player 2 179 b.setFont(USER_NAME_FONT); 180 b.setColor(getBackground()); 181 b.fillRect( 182 (int) (getPreferredSize().getWidth() / 2) - (b.getFontMetrics().stringWidth(model.getPlayersName(offset[2])) / 2) - 5, 183 2, 184 10 + b.getFontMetrics().stringWidth(model.getPlayersName(offset[2])), 185 b.getFontMetrics().getHeight() + 2); 186 b.setColor(getForeground()); 187 188 b.drawString( 189 model.getPlayersName(offset[2]), 190 (int) (getPreferredSize().getWidth() / 2) - (b.getFontMetrics().stringWidth(model.getPlayersName(offset[2])) / 2), 191 b.getFontMetrics().getHeight() + 2); 192 //Card 2 193 if (model.getCard(offset[2]) != null) 194 { 195 cardRenderer.render(model.getCard(offset[2]), b, this, false, leftOfMiddleCards, 25); 196 } 197 else 198 { 199 b.setColor(getBackground()); 200 b.fillRect(leftOfMiddleCards, 25, (int) cardRenderer.getDimensionOfCard().getWidth(), (int) cardRenderer.getDimensionOfCard().getHeight()); 201 } 202 } 203 204 if (model.getPlayersName(offset[3]) != null) 205 { 206 //Player 3 207 b.setColor(getForeground()); 208 b.setFont(USER_NAME_FONT); 209 PaintUtils.drawVerticalString( 210 b, 211 getBackground(), 212 model.getPlayersName(offset[3]), 213 (int) (35 + cardRenderer.getDimensionOfCard().getWidth() * 3), 214 (int) getPreferredSize().getHeight() / 2 + 10); 215 //Card 3 216 if (model.getCard(offset[3]) != null) 217 { 218 cardRenderer.render(model.getCard(offset[3]), b, this, false, (int) (29 + cardRenderer.getDimensionOfCard().getWidth() * 2), topOfSideCards); 219 // topOfSideCards); 220 } 221 else 222 { 223 b.setColor(getBackground()); 224 b.fillRect( 225 (int) (29 + cardRenderer.getDimensionOfCard().getWidth() * 2), 226 topOfSideCards, 227 (int) cardRenderer.getDimensionOfCard().getWidth(), 228 (int) cardRenderer.getDimensionOfCard().getHeight()); 229 } 230 } 231 repaint(); 232 } 233 234 private Dimension dimension; 235 public Dimension getPreferredSize() 236 { 237 if (dimension == null) 238 { 239 dimension = 240 new Dimension((int) (50 + cardRenderer.getDimensionOfCard().getWidth() * 3), (int) (50 + cardRenderer.getDimensionOfCard().getHeight() * 2)); 241 } 242 return dimension; 243 } 244 245 /*** 246 * @see net.mlw.gfw.client.ClientEventHandler#init(net.mlw.gfw.client.ClientContext) 247 */ 248 public void init(ClientContext context) 249 { 250 } 251 252 /*** 253 * @see net.mlw.gfw.event.EventHandler#onEvent(net.mlw.gfw.event.Event) 254 */ 255 public void onEvent(Event event) 256 { 257 drawTable(); 258 } 259 260 /*** 261 * @return Returns the model. 262 */ 263 public TableModel getModel() 264 { 265 return model; 266 } 267 268 /*** 269 * @param model The model to set. 270 */ 271 public void setModel(TableModel model) 272 { 273 if (this.model != null) 274 { 275 this.model.removeEventHandler(eventHandler); 276 } 277 this.model = model; 278 this.model.addEventHandler(eventHandler); 279 } 280 281 private EventHandler eventHandler = new EventHandler() 282 { 283 /*** 284 * @see net.mlw.gfw.event.EventHandler#onEvent(net.mlw.gfw.event.Event) 285 */ 286 public void onEvent(Event event) 287 { 288 drawTable(); 289 } 290 }; 291 292 private JDialog dialog = null; 293 public JDialog toJDialog(JFrame owner) 294 { 295 if (dialog == null) 296 { 297 dialog = new JDialog(owner); 298 dialog.getContentPane().add(this); 299 dialog.pack(); 300 } 301 302 return dialog; 303 } 304 }

This page was automatically generated by Maven