001 package com.croftsoft.core.gui; 002 003 import com.croftsoft.core.lang.*; 004 import java.awt.*; 005 006 /********************************************************************* 007 * @version 008 * 1997-04-08 009 * @author 010 * <A HREF="http://www.alumni.caltech.edu/~croft">David W. Croft</A> 011 *********************************************************************/ 012 013 public class TextDialog extends Dialog { 014 ////////////////////////////////////////////////////////////////////// 015 ////////////////////////////////////////////////////////////////////// 016 017 private static final int WIDTH_PAD = 13; // kludge 018 019 private Frame parent; 020 private Label [ ] labels; 021 private Dimension size_old; 022 023 ////////////////////////////////////////////////////////////////////// 024 ////////////////////////////////////////////////////////////////////// 025 026 public TextDialog ( 027 Frame parent, 028 String title, 029 boolean modal, 030 String [ ] lines ) { 031 ////////////////////////////////////////////////////////////////////// 032 super ( parent, title, modal ); 033 this.parent = parent; 034 035 setBackground ( Color.lightGray ); 036 setLayout ( null ); 037 setResizable ( false ); 038 039 labels = new Label [ lines.length ]; 040 for ( int i = 0; i < labels.length; i++ ) { 041 add ( labels [ i ] = new Label ( lines [ i ], Label.CENTER ) ); 042 } 043 044 show ( ); 045 } 046 047 public TextDialog ( 048 Frame parent, 049 String title, 050 boolean modal, 051 String line ) { 052 ////////////////////////////////////////////////////////////////////// 053 this ( parent, title, modal, StringLib.toStringArray ( line ) ); 054 } 055 056 public void layout ( ) { 057 ////////////////////////////////////////////////////////////////////// 058 int label_width = 0; 059 int label_height = 0; 060 for ( int i = 0; i < labels.length; i++ ) { 061 Dimension preferredSize = labels [ i ].preferredSize ( ); 062 label_width = ( label_width > preferredSize.width ) 063 ? label_width : preferredSize.width; 064 label_height = ( label_height > preferredSize.height ) 065 ? label_height : preferredSize.height; 066 } 067 Insets insets = insets ( ); 068 069 for ( int i = 0; i < labels.length; i++ ) { 070 labels [ i ].reshape ( insets.left, insets.top + i * label_height, 071 label_width, label_height ); 072 } 073 074 Dimension desired = new Dimension ( 075 label_width + insets.left + insets.right + WIDTH_PAD, 076 labels.length * label_height + insets.top + insets.bottom ); 077 Dimension size = size ( ); 078 if ( ( size_old == null ) || ( size.width != desired.width ) 079 || ( size.height != desired.height ) ) { 080 size_old = size; 081 WindowLib.centerAboveParent ( this, desired ); 082 } 083 } 084 085 public boolean handleEvent ( Event event ) { 086 ////////////////////////////////////////////////////////////////////// 087 if ( event.id == Event.WINDOW_DESTROY ) { 088 dispose ( ); 089 return true; 090 } 091 return super.handleEvent ( event ); 092 } 093 094 ////////////////////////////////////////////////////////////////////// 095 ////////////////////////////////////////////////////////////////////// 096 }