2013-04-24 1051 views
0

我應該如何修改此代碼才能編譯?我知道有很多問題...非常感謝〜 我應該在statechanged中放置什麼? 我應該如何JSpinner的鏈接到的JOptionPane?(我創建的btnEnter,我添加的ChangeListener,做又是什麼?)Jspinner和JOptionPane

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); 
    } 
} 
} 

編輯的版本 進口的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); 
    } 
} 

}

回答

0

ChangeListener旨在爲JSpinnerdateJs而非JButtonbtnEnter。您可以使用:

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... 
     } 
    } 
}); 

旁註:

  • 方法show贊成不贊成setVisible顯示JDialog窗口。
  • 使用layout managerrecommended by Sun/Oracle - 它們管理組件的大小和定位。
  • 單獨paint方法DoubleBufferedPanel爲空,自定義繪畫在Swing中應通過覆蓋paintComponent並調用super.paintComponent(g)來完成。

編輯:

您陰影的dialog變量。更換

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

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

確定這裏是我的新代碼...我不知道什麼是扶持的的JDialog當我按btnEnter /// – 2013-04-25 16:13:07

+0

查看更新的問題.... ... – Reimeus 2013-04-25 16:23:34

+0

非常感謝你...... :) – 2013-04-26 16:49:20