【问题标题】:How use jxdatepicker in groovy with swingbuilder?如何在带有 swingbuilder 的 groovy 中使用 jxdatepicker?
【发布时间】:2018-07-18 06:19:50
【问题描述】:

我正在尝试使用此代码使用 swingx 和 groovy 创建日期选择器

但我不知道,因为不工作

我试图在第一个标签中显示日期选择器,但没有显示任何内容

不知道怎么回事

请帮我编程

这是我使用 swingx 和 javax 的最终代码 IM

并使用 swingbuilder 请检查此代码

帮帮我

这不是同一个问题我正在尝试使用wingx jxdatepicker,但我的代码不起作用 请检查这部分

picker.setFormats(new SimpleDateFormat("dd.MM.yyyy"));表格布局{ 选择器.show()

import groovy.swing.SwingBuilder 
import groovy.beans.Bindable 
 import java.text.SimpleDateFormat;
import java.util.Calendar;
import javax.swing.JFrame;
import javax.swing.JPanel;
import static javax.swing.JFrame.EXIT_ON_CLOSE 
@Grapes(
    @Grab(group='org.swinglabs', module='swingx', version='1.6')
)

import org.jdesktop.swingx.JXDatePicker;
import java.awt.*

@Bindable
class Address { 
    String street, number, city
    String toString() { "address[street=$street,number=$number,city=$city]" }
}

def address = new Address(street: 'Evergreen Terrace', number: '742', city: 'Springfield')

def swingBuilder = new SwingBuilder()
swingBuilder.edt {  // edt method makes sure UI is build on Event Dispatch Thread.
    lookAndFeel 'nimbus'  // Simple change in look and feel.
    frame(title: 'Address', size: [350, 230],
            show: true, locationRelativeTo: null,
            defaultCloseOperation: EXIT_ON_CLOSE) {
        borderLayout(vgap: 5)

        panel(constraints: BorderLayout.CENTER,

                border: compoundBorder([emptyBorder(10), titledBorder('Enter your address:')])) {
        JXDatePicker picker = new JXDatePicker();
        picker.setDate(Calendar.getInstance().getTime());
        picker.setFormats(new SimpleDateFormat("dd.MM.yyyy"));

            tableLayout {
       picker.show()
                tr {
                    td {
                             picker
                    }
                    td {
                        textField address.street, id: 'streetField', columns: 20
                    }
                }
                tr {
                    td {
                        label 'Number:'
                    }
                    td {
                        textField id: 'numberField', columns: 5, text: address.number
                    }
                }
                tr {
                    td {
                        label 'City:'
                    }
                    td {
                        textField id: 'cityField', columns: 20, address.city
                    }
                }
            }

        }

        panel(constraints: BorderLayout.SOUTH) {
            button text: 'Save', actionPerformed: {
                println address
            }
        }

        // Binding of textfield's to address object.
        bean address,
            street: bind { streetField.text },
            number: bind { numberField.text },
            city: bind { cityField.text }
    } 
}

【问题讨论】:

    标签: java swing groovy


    【解决方案1】:

    如果您正确注册JXDatePicker,您的示例应该可以工作,缺少的行可能如下所示: registerBeanFactory("datePicker", JXDatePicker) 而且您不需要实例化 JXDatePicker 小部件,也不需要显式显示它,SwingBuilder 应该负责这一点,这个示例适用于我:

    import groovy.swing.SwingBuilder 
    import groovy.beans.Bindable 
    import java.text.SimpleDateFormat
    import java.util.Calendar
    import javax.swing.JFrame
    import javax.swing.JPanel
    import static javax.swing.JFrame.EXIT_ON_CLOSE 
    @Grapes(
        @Grab(group='org.swinglabs', module='swingx', version='1.6')
    )
    
    import org.jdesktop.swingx.JXDatePicker
    import java.awt.*
    
    @Bindable
    class Address { 
        String street, number, city
        String toString() { "address[street=$street,number=$number,city=$city]" }
    }
    
    def address = new Address(street: 'Evergreen Terrace', number: '742', city: 'Springfield')
    
    def swingBuilder = new SwingBuilder()
    swingBuilder.edt {  // edt method makes sure UI is build on Event Dispatch Thread.
        registerBeanFactory("datePicker", JXDatePicker)
        lookAndFeel 'nimbus'  // Simple change in look and feel.
        frame(title: 'Address', size: [350, 230],
                show: true, locationRelativeTo: null,
                defaultCloseOperation: EXIT_ON_CLOSE) {
            borderLayout(vgap: 5)
    
            panel(constraints: BorderLayout.CENTER,
    
                    border: compoundBorder([emptyBorder(10), titledBorder('Enter your address:')])) {
    
                tableLayout {
                    tr {                
                        td {
                            label 'Birth Date:'
                        }
                        td {
                            datePicker(date: new Date(), formats: new SimpleDateFormat("dd.MM.yyyy"))
                        }
                    }
                    tr {                
                        td {
                            label 'Street:'
                        }
                        td {
                            textField address.street, id: 'streetField', columns: 20
                        }
                    }
    
                    tr {
                        td {
                            label 'Number:'
                        }
                        td {
                            textField id: 'numberField', columns: 5, text: address.number
                        }
                    }
                    tr {
                        td {
                            label 'City:'
                        }
                        td {
                            textField id: 'cityField', columns: 20, address.city
                        }
                    }
                }
    
            }
    
            panel(constraints: BorderLayout.SOUTH) {
                button text: 'Save', actionPerformed: {
                    println address
                }
            }
    
            // Binding of textfield's to address object.
            bean address,
                street: bind { streetField.text },
                number: bind { numberField.text },
                city: bind { cityField.text }
        } 
    }
    

    那么您应该也可以将日期选择器的值绑定到 bean 地址,更多详细信息请查看:Building Rich Applications with Groovy's SwingBuilder, TS-5098, JavaOne 2008

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多