1 21 22 package com.izforge.izpack.gui; 23 24 import java.awt.Component ; 25 import java.awt.Container ; 26 import java.awt.Dimension ; 27 import java.awt.Insets ; 28 import java.awt.LayoutManager ; 29 30 31 88 89 public class FlowLayout implements LayoutManager 90 { 91 92 95 public static final int LEFT = 0; 96 97 100 public static final int CENTER = 1; 101 102 105 public static final int RIGHT = 2; 106 107 115 public static final int LEADING = 3; 116 117 125 public static final int TRAILING = 4; 126 127 137 int align; 139 151 int newAlign; 153 161 int hgap; 162 163 171 int vgap; 172 173 174 178 179 public FlowLayout() 180 { 181 this(CENTER, 5, 5); 182 } 183 184 185 192 193 public FlowLayout(int align) 194 { 195 this(align, 5, 5); 196 } 197 198 199 210 211 public FlowLayout(int align, int hgap, int vgap) 212 { 213 this.hgap = hgap; 214 this.vgap = vgap; 215 setAlignment(align); 216 } 217 218 219 227 228 public int getAlignment() 229 { 230 return (newAlign); 231 } 232 233 234 242 243 public void setAlignment(int align) 244 { 245 this.newAlign = align; 246 247 251 switch (align) 252 { 253 case LEADING: 254 this.align = LEFT; 255 break; 256 case TRAILING: 257 this.align = RIGHT; 258 break; 259 default: 260 this.align = align; 261 break; 262 } 263 } 264 265 266 273 274 public int getHgap() 275 { 276 return (hgap); 277 } 278 279 280 287 288 public void setHgap(int hgap) 289 { 290 this.hgap = hgap; 291 } 292 293 294 301 302 public int getVgap() 303 { 304 return (vgap); 305 } 306 307 308 315 316 public void setVgap(int vgap) 317 { 318 this.vgap = vgap; 319 } 320 321 322 328 329 public void addLayoutComponent(String name, Component comp) 330 { 331 } 332 333 334 340 341 public void removeLayoutComponent(Component comp) 342 { 343 } 344 345 346 355 356 public Dimension preferredLayoutSize(Container target) 357 { 358 synchronized (target.getTreeLock()) 359 { 360 Dimension dim = new Dimension (0, 0); 361 int nmembers = target.getComponentCount(); 362 boolean firstVisibleComponent = true; 363 364 for (int i = 0; i < nmembers; i++) 365 { 366 Component m = target.getComponent(i); 367 if (m.isVisible()) 368 { 369 Dimension d = m.getPreferredSize(); 370 dim.height = Math.max(dim.height, d.height); 371 if (firstVisibleComponent) 372 { 373 firstVisibleComponent = false; 374 } 375 else 376 { 377 dim.width += hgap; 378 } 379 dim.width += d.width; 380 } 381 } 382 383 Insets insets = target.getInsets(); 384 dim.width += insets.left + insets.right + hgap * 2; 385 dim.height += insets.top + insets.bottom + vgap * 2; 386 387 return (dim); 388 } 389 } 390 391 392 402 403 public Dimension minimumLayoutSize(Container target) 404 { 405 synchronized (target.getTreeLock()) 406 { 407 Dimension dim = new Dimension (0, 0); 408 int nmembers = target.getComponentCount(); 409 410 for (int i = 0; i < nmembers; i++) 411 { 412 Component m = target.getComponent(i); 413 if (m.isVisible()) 414 { 415 Dimension d = m.getMinimumSize(); 416 dim.height = Math.max(dim.height, d.height); 417 if (i > 0) 418 { 419 dim.width += hgap; 420 } 421 dim.width += d.width; 422 } 423 } 424 425 Insets insets = target.getInsets(); 426 dim.width += insets.left + insets.right + hgap * 2; 427 dim.height += insets.top + insets.bottom + vgap * 2; 428 429 return (dim); 430 } 431 } 432 433 434 445 446 private void moveComponents(Container target, int x, int y, int width, int height, 447 int rowStart, int rowEnd, boolean ltr) 448 { 449 synchronized (target.getTreeLock()) 450 { 451 switch (newAlign) 452 { 453 case LEFT: 454 x += ltr ? 0 : width; 455 break; 456 case CENTER: 457 x += width / 2; 458 break; 459 case RIGHT: 460 x += ltr ? width : 0; 461 break; 462 case LEADING: 463 break; 464 case TRAILING: 465 x += width; 466 break; 467 } 468 469 for (int i = rowStart; i < rowEnd; i++) 470 { 471 Component m = target.getComponent(i); 472 473 if (m.isVisible()) 474 { 475 if (ltr) 476 { 477 m.setLocation(x, y + (height - m.getSize().height) / 2); 478 } 479 else 480 { 481 m.setLocation(target.getSize().width - x - m.getSize().width, y 482 + (height - m.getSize().height) / 2); 483 } 484 485 x += m.getSize().width + hgap; 486 } 487 } 488 } 489 } 490 491 492 500 501 public void layoutContainer(Container target) 502 { 503 synchronized (target.getTreeLock()) 504 { 505 Insets insets = target.getInsets(); 506 int maxWidth = target.getSize().width - (insets.left + insets.right + hgap * 2); 507 int nMembers = target.getComponentCount(); 508 int x = 0; 509 int y = insets.top + vgap; 510 int rowh = 0; 511 int start = 0; 512 513 boolean ltr = target.getComponentOrientation().isLeftToRight(); 514 515 for (int i = 0; i < nMembers; i++) 516 { 517 Component m = target.getComponent(i); 518 519 if (m.isVisible()) 520 { 521 Dimension d = m.getPreferredSize(); 522 m.setSize(d.width, d.height); 523 524 if ((x == 0) || ((x + d.width) <= maxWidth)) 525 { 526 if (x > 0) 527 { 528 x += hgap; 529 } 530 x += d.width; 531 rowh = Math.max(rowh, d.height); 532 } 533 else 534 { 535 moveComponents(target, insets.left, y, maxWidth - x, rowh, start, i, ltr); 536 x = d.width; 537 y += vgap + rowh; 538 rowh = d.height; 539 start = i; 540 } 541 } 542 } 543 544 moveComponents(target, insets.left, y, maxWidth - x, rowh, start, nMembers, ltr); 545 } 546 } 547 548 549 554 555 public String toString() 556 { 557 String str = ""; 558 559 switch (align) 560 { 561 case LEFT: 562 str = ",align=left"; 563 break; 564 case CENTER: 565 str = ",align=center"; 566 break; 567 case RIGHT: 568 str = ",align=right"; 569 break; 570 case LEADING: 571 str = ",align=leading"; 572 break; 573 case TRAILING: 574 str = ",align=trailing"; 575 break; 576 } 577 578 return (getClass().getName() + "[hgap=" + hgap + ",vgap=" + vgap + str + "]"); 579 } 580 } 581 582 | Popular Tags |