2017-04-19 47 views
0

,所以我试图让2下拉在Java图形用户界面菜单,将允许用户和时区之间进行选择比较他们两个人。但我遇到了试图获取用户从lambda表达式中选择时区变量的问题。我仍然相当新的Java所以任何帮助,将不胜感激请获得一个时区了lambda表达式(JAVA)的

这是给我发出

tz tz1= new tz(); 

ComboBox<String> cboNation = new ComboBox<>(); 
ObservableList<String> items = FXCollections.observableArrayList 
    ("GMT+14", "GMT+13", "GMT+12", "GMT+11","GMT+10", "GMT+9", "GMT+8", 
    "GMT+7", "GMT+6", "GMT+5", "GMT+4", "GMT+3", "GMT+2", "GMT+1", 
    "GMT0" ,"GMT-1", "GMT-2", "GMT-3", "GMT-4", "GMT-5", "GMT-6", 
    "GMT-7", "GMT-8", "GMT-9", "GMT-10", "GMT-11", "GMT-12", "GMT-13", "GMT-14"); 
cboNation.getItems().addAll(items); 
cboNation.setValue(items.get(0)); 
cboNation.setOnAction(e -> 
{ 

currentIndex = items.indexOf(cboNation.getValue()); 
TimeZone tz = TimeZone.getTimeZone(timezones[currentIndex]); 
String Timezone2 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(tz); 
tz1.firstdisplay = Timezone2; 
}); 

gridPane.add(new Label(tz1.firstdisplay), 0, 0); 

我希望能够得到TZ出来的表达,并能够代码将其格式化为显示日期的字符串。如果有帮助的话,它会出现在gui上。

编辑 我引用试图传球程序现在运行,但时区没有在GUI中显示出来。我补充一点,是为了显示他们,但什么也没有发生

+1

欢迎堆栈溢出!请[开始浏览](http://stackoverflow.com/tour),看看该网站是如何工作的,并在题目什么样的问题在这里。另请参见:[如何创建最小,完整和可验证的示例](http://stackoverflow.com/help/mcve) –

+0

从lambda body中调用具有所选时区的方法作为参数,然后用它做东西(你可以把它分配给一个代表当前时区的全局变量或者漂浮在你的船上的任何东西) – Sneh

+0

顺便说一句,'TimeZone'已经被java.time类'ZoneId'和'ZoneOffset'所取代。此外,您的列表是指[*'抵消 - 从 - UTC' *](https://en.m.wikipedia.org/wiki/UTC_offset)值,而不是时区。时区是特定地区偏移量变化的历史记录。一个时区的适当名称是大陆/地区,如“America/Montreal”或“Asia/Kolkata”。 –

回答

0

其实你TimeZone tz变量的lambda表达式内部创建和您要使用与代码行 String Timezone2 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(tz);您的lambda表达式外的线。您应该将TimeZone tz变量声明为实例变量。

+0

我如何正确地做到这一点,我自己试了一下,似乎没有工作 –