Java 从JCalendar返回值的JOptionPane或JFrame
是否可以从JFrame或JOptionPane中返回一个值,其中我有来自Flib的Jcalendar?JCalendar需要自己的侦听器类。我有这个:Java 从JCalendar返回值的JOptionPane或JFrame,java,swing,jcalendar,Java,Swing,Jcalendar,是否可以从JFrame或JOptionPane中返回一个值,其中我有来自Flib的Jcalendar?JCalendar需要自己的侦听器类。我有这个: org.freixas.jcalendar.JCalendar jd = new org.freixas.jcalendar.JCalendar(org.freixas.jcalendar.JCalendar.DISPLAY_DATE | org.freixas.jcalendar.JCalendar.DISPLAY_TIME,true);
org.freixas.jcalendar.JCalendar jd = new org.freixas.jcalendar.JCalendar(org.freixas.jcalendar.JCalendar.DISPLAY_DATE | org.freixas.jcalendar.JCalendar.DISPLAY_TIME,true);
KalendarPanel kalendar = new KalendarPanel();
String message = "Choose start date:\n";
Object[] params = {message, jd};
JOptionPane.showConfirmDialog(null, params, "Start date", JOptionPane.PLAIN_MESSAGE);
但我不知道如何添加Listener类以及如何从JOptionPane返回值。在JFrame中,我可以添加类listener,但我不知道如何将值返回到父JFrame。
JFrame代码:
public class Kalendar extends javax.swing.JFrame {
private Calendar date;
private SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-dd HH:MM:ss");
private String datum;
public Kalendar() {
initComponents();
jCalendar1.addDateListener(new MyDateListener());
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jCalendar1 = new org.freixas.jcalendar.JCalendar();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jCalendar1, javax.swing.GroupLayout.PREFERRED_SIZE, 315, javax.swing.GroupLayout.PREFERRED_SIZE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jCalendar1, javax.swing.GroupLayout.PREFERRED_SIZE, 188, javax.swing.GroupLayout.PREFERRED_SIZE)
);
pack();
}// </editor-fold>
// Variables declaration - do not modify
private org.freixas.jcalendar.JCalendar jCalendar1;
// End of variables declaration
class MyDateListener implements DateListener {
@Override
public void dateChanged(DateEvent e) {
datum = sdf.format(e.getSelectedDate().getTime());
}
}
公共类Kalendar扩展了javax.swing.JFrame{
私人日历日期;
私有SimpleDataFormat sdf=新SimpleDataFormat(“YYYY-MM-dd HH:MM:ss”);
私有字符串数据;
公共Kalendar(){
初始化组件();
jCalendar1.addDateListener(新的MyDateListener());
}
/**
*从构造函数中调用此方法来初始化表单。
*警告:不要修改此代码。此方法的内容始终为
*由表单编辑器重新生成。
*/
@抑制警告(“未选中”)
//
私有组件(){
jCalendar1=neworg.freixas.jcalendar.jcalendar();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
javax.swing.GroupLayout=newjavax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(布局);
layout.setHorizontalGroup(
createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jCalendar1,javax.swing.GroupLayout.PREFERRED\u SIZE,315,javax.swing.GroupLayout.PREFERRED\u SIZE)
);
layout.setVerticalGroup(
createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jCalendar1,javax.swing.GroupLayout.PREFERRED\u SIZE,188,javax.swing.GroupLayout.PREFERRED\u SIZE)
);
包装();
}//
//变量声明-不修改
private org.freixas.jcalendar.jcalendar jCalendar1;
//变量结束声明
类MyDateListener实现DateListener{
@凌驾
公共作废日期已更改(日期事件e){
datum=sdf.format(如getSelectedDate().getTime());
}
}
非常感谢。这里为您提供了一个解决方案。我希望您可以将此方法用于组件(JCalendar)
import javax.swing.JList;
导入javax.swing.JOptionPane;
导入javax.swing.JScrollPane;
导入javax.swing.SwingUtilities;
导入javax.swing.event.ListSelectionEvent;
导入javax.swing.event.ListSelectionListener;
公共类ListOptionTest{
公共静态void main(字符串[]args){
SwingUtilities.invokeLater(新的Runnable(){
@凌驾
公开募捐{
字符串[]数据=新字符串[10];
对于(int i=0;i<10;i++){
数据[i]=“项目”+(i+1);
}
最终JList列表=新JList(数据);
addListSelectionListener(新的ListSelectionListener(){
@凌驾
public void值已更改(ListSelectionEvent e){
如果(!e.getValueIsAdjusting()){
System.out.println(“当前选择:+list.getSelectedValuesList());
}
}
});
int result=JOptionPane.showConfirmDialog(空,新JScrollPane(列表),“做出选择”,
JOptionPane.OK\u CANCEL\u选项);
if(result==JOptionPane.OK\u选项){
System.out.println(“最终选择:+list.getSelectedValuesList());
}否则{
System.out.println(“无选择”);
}
}
});
}
}
感谢您提供此解决方案
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class ListOptionTest {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
String[] data = new String[10];
for (int i = 0; i < 10; i++) {
data[i] = "Item " + (i + 1);
}
final JList<String> list = new JList<>(data);
list.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
if (!e.getValueIsAdjusting()) {
System.out.println("Current selection: " + list.getSelectedValuesList());
}
}
});
int result = JOptionPane.showConfirmDialog(null, new JScrollPane(list), "Make your choice",
JOptionPane.OK_CANCEL_OPTION);
if (result == JOptionPane.OK_OPTION) {
System.out.println("Final selection: " + list.getSelectedValuesList());
} else {
System.out.println("No choice");
}
}
});
}
}