package groovy.swing

import java.awt.BorderLayout
import javax.swing.BorderFactory

/**
 * Demonstrates the use of the table layout
 */
class TableLayoutDemo {
    
    property frame
    property swing
    
    void run() {
        swing = new SwingBuilder()
        
        frame = swing.frame(title:'TableLayout Demo', location:[200,200], size:[300,200]) {
            menuBar {
		        menu(text:'Help') {
		            menuItem() {
		                action(name:'About', closure:{ showAbout() })
		            }
		        }
		    }
			tableLayout {
                tr {
                    td {
                        label(text:'name')
                    }
                    td(colfill:true) {
                        textField(text:'James')
                    }
                }
                tr {
                    td {
                        label(text:'location')
                    }
                    td(colfill:true) {
                        textField(text:'London')
                    }
                }
                tr {
                    td(colspan:2, align:'center') {
                        button(text:'OK')
                    }
                }
            }
		}        
		frame.show()
    }
    
    showAbout() {
 		pane = swing.optionPane(message:'This demo shows how you can use HTML style table layouts with Swing components')
 		dialog = pane.createDialog(frame, 'About TableLayout Demo')
 		dialog.show()
    }
}
