Question

How should I amend this code in order to compile? I know there is a lot of problems...Thanks a lot~ What should I put in statechanged? How should I link the JSpinner to JOptionPane?(the btnEnter I created, I added ChangeListener, then what to do?)

import javax.swing.*;
import java.awt.Container;
import java.util.Calendar;
import java.util.Date;
import javax.swing.event.*;
import java.awt.event.*;
import java.awt.Graphics;
import java.lang.Comparable;
import javax.swing.JOptionPane; 
import javax.swing.JDialog;

public class JSpinnerr extends JApplet
implements ActionListener, ChangeListener{
private    static final long serialVersionUID = 2005L;

private    Container    window;
private    JButton      btnEnter;
private    JOptionPane  pane;
private    JLabel       favoriteJl;
private    JButton[]    choiceJb;
private    ButtonGroup  choiceBg;

//spinner.setEditor(new JSpinner.DateEditor(spinner, "MM/yyyy"));
public    void init() {
    window = new DoubleBufferedPanel();
    setContentPane(window);

    createAppearance();
    createGUI();
    createJOptionPane();

}

public void createAppearance(){
    window.setLayout(null);
}

public void createGUI(){
    favoriteJl = new JLabel("When are you going to graduate from High School?");
    favoriteJl.setSize(100, 30);
    favoriteJl.setLocation(20, 120);
    window.add(favoriteJl);

    btnEnter = new JButton("Enter");
    btnEnter.setSize(100, 30);
    btnEnter.setLocation(220, 120);
    btnEnter.addChangeListener(this);
    window.add(btnEnter);

    Date today = new Date();

    JSpinner dateJs = new JSpinner(new SpinnerDateModel(today, null, null,
                Calendar.MONTH));
    JSpinner.DateEditor dateDe = new JSpinner.DateEditor(dateJs, "MM/yy");
    dateJs.setEditor(dateDe);
    window.add(dateJs);

    setVisible(true);
}

public void createJOptionPane(){
    JOptionPane pane = new JOptionPane("Congratulations!");
    JDialog dialog = pane.createDialog(null, "Way to go! Please continue to work hard.");
    dialog.show();

    choiceBg = new ButtonGroup();
    choiceJb = new JButton[] {
        new JButton("Laugh"),
        new JButton("I am worry"),
        new JButton("I don't want to work anymore"),
        new JButton("Present Options") };
    for (int i = 0; i < choiceJb.length; i++) {
        choiceBg.add(choiceJb[i]);
        pane.add(choiceJb[i]);
    }
    window.add(pane);

}
public void actionPerformed(ActionEvent e) {
    //if(e.getSource() == )
    // {
    // }

    if(choiceJb[0].isSelected())
    {
        pane.showMessageDialog(this, "Laugh",
            "Don't laugh", pane.WARNING_MESSAGE);
    } 
    else if (choiceJb[1].isSelected()) {
        Object[] options = {"Because of my grades",
                "Because of my SAT scores"};
        int n = pane.showConfirmDialog(this, 
            "Why are you worry?", "I am worry", JOptionPane.YES_NO_OPTION,
            JOptionPane.QUESTION_MESSAGE,
            null,    
            options,  
            options[0]);
    } 
    else if (choiceJb[2].isSelected()) {
        Object[] reasons = {"I just want to chill out", "I have no incentive to work hard", "I am tired"};
        String s = (String)pane.showInputDialog(this, "What is the reason that you don't want to work anymore?",
            "Your reason?", pane.PLAIN_MESSAGE, null, reasons, "I just want to chill out");
    } 
    else if (choiceJb[3].isSelected()) {
        JOptionPane.showOptionDialog(this, "Present Options",
            "Simple Dialog", getButtonType(), getMessageType(),
            null, substrings(ButtonLabels), null);
    }

}
public void stateChanged(ChangeEvent e){
}

class DoubleBufferedPanel extends JPanel {
    private static final long    serialVersionUID = 44L;

    public void paint(Graphics g){
        super.paint(g);
    }
}
 }

edited version import javax.swing.; import java.awt.Container; import java.util.Calendar; import java.util.Date; import javax.swing.event.; import java.awt.event.*; import java.awt.Graphics; import java.lang.Comparable; import javax.swing.JOptionPane; import javax.swing.JDialog; import java.awt.Dimension; import java.awt.FlowLayout;

public class JSpinnerrDemo extends JApplet
implements ActionListener, ChangeListener{
private    static final long serialVersionUID = 2005L;

private    Container    window;
private    JButton      btnEnter;
private    JOptionPane  pane;
private    JLabel       dateJl;
private    JButton[]    choiceJb;
private    ButtonGroup  choiceBg;
private    JDialog      dialog;

//spinner.setEditor(new JSpinner.DateEditor(spinner, "MM/yyyy"));
public    void init() {
    window = new DoubleBufferedPanel();
    setContentPane(window);

    createAppearance();
    createGUI();
    createJOptionPane();

}

public void createAppearance(){
    window.setLayout(null);
}

public void createGUI(){
    dateJl = new JLabel("When are you going to graduate from High School?");
    dateJl.setSize(400, 30);
    dateJl.setLocation(20, 120);
    window.add(dateJl);

    btnEnter = new JButton("Enter");
    btnEnter.setSize(100, 30);
    btnEnter.setLocation(220, 180);
    btnEnter.addActionListener(this);
    window.add(btnEnter);

    Date today = new Date();

    JSpinner dateJs = new JSpinner(new SpinnerDateModel(today, null, null,
                Calendar.MONTH));
    JSpinner.DateEditor dateDe = new JSpinner.DateEditor(dateJs, "MM/yy");
    dateJs.setEditor(dateDe);
    dateJs.setLocation(20, 160);
    dateJs.setSize(100, 30);
    window.add(dateJs);
    dateJs.addChangeListener(this);
    dateJs.setVisible(true);

}

public void createJOptionPane(){
    JOptionPane pane = new JOptionPane("Way to go! Please continue to work hard.");
    JDialog dialog = pane.createDialog(null, "Congratulations!");

    dialog.setSize(new Dimension(300, 150));
    dialog.setLocationRelativeTo(this);
    dialog.setLayout(new FlowLayout());
    dialog.setVisible(false);

    choiceBg = new ButtonGroup();
    choiceJb = new JButton[] {
        new JButton("Laugh"),
        new JButton("I am worry"),
        new JButton("I don't want to work anymore"),
        new JButton("What?") };
    for (int i = 0; i < choiceJb.length; i++) {
        choiceBg.add(choiceJb[i]);
        dialog.add(choiceJb[i]);
    }

}

public void actionPerformed(ActionEvent e) {
    if(e.getSource() == btnEnter)
    {
        dialog.setVisible(true);
        window.add(dialog);
        //JOptionPane.showMessageDialog( );
    }

    if(choiceJb[0].isSelected())
    {
        JOptionPane.showMessageDialog(this, "Laugh",
            "Don't laugh", JOptionPane.WARNING_MESSAGE);
    } 
    else if (choiceJb[1].isSelected()) {
        Object[] options = {"Because of my grades",
                "Because of my SAT scores"};
        JOptionPane.showOptionDialog(this,
            "Why are you worry?",
            "I am worry",
            JOptionPane.YES_NO_OPTION,
            JOptionPane.QUESTION_MESSAGE,
            null,     //do not use a custom Icon
            options,  //the titles of buttons
            options[0]); //default button title
        //  showConfirmDialog(Component parentComponent, Object message, String title, int optionType, int messageType, Icon icon)
    } 
    else if (choiceJb[2].isSelected()) {
        Object[] reasons = {"I just want to chill out", "I have no incentive to work hard", "I am tired"};
        JOptionPane.showInputDialog(this, "What is the reason that you don't want to work anymore?",
            "Your reason?", JOptionPane.PLAIN_MESSAGE, null, reasons, "I just want to chill out");

    } 
    else if (choiceJb[3].isSelected()) {
        Object[] optionss = {"Leave me alone",
                "Bye"};

        JOptionPane.showOptionDialog(this, "What what?",
            "What?",  JOptionPane.YES_NO_CANCEL_OPTION,
            JOptionPane.QUESTION_MESSAGE,
            null,
            optionss,
            optionss[0]);

    }
}

public void stateChanged(ChangeEvent e){
}

class DoubleBufferedPanel extends JPanel {
    private static final long    serialVersionUID = 44L;

    public void paint(Graphics g){
        super.paint(g);
    }
}

}

Was it helpful?

Solution

The ChangeListener is meant for the JSpinner dateJs rather than the JButton btnEnter. You can use:

dateJs.addChangeListener(new ChangeListener() {
   @Override
   public void stateChanged(ChangeEvent e) {
      SpinnerModel dateModel = dateJs.getModel();
      if (dateModel instanceof SpinnerDateModel) {
         Date date = ((SpinnerDateModel)dateModel).getDate();
         // do stuff with date...
      }
   }
});

Side notes:

  • The method show is deprecated in favor of setVisible for displaying JDialog windows.
  • Using a layout manager is recommended by Sun/Oracle - they manage sizing and positoning of components.
  • Apart paint method in DoubleBufferedPanel being empty, custom painting in Swing should be done by overriding paintComponent and calling super.paintComponent(g).

Edit:

You are shadowing the dialog variable. Replace

JDialog dialog = pane.createDialog(null, "Congratulations!");

with

dialog = pane.createDialog(null, "Congratulations!");
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top