簡體   English   中英

Jspinner和JOptionPane

[英]Jspinner and JOptionPane

我應該如何修改此代碼以進行編譯? 我知道這里有很多問題...非常感謝〜我應該把狀態更改為什么? 我應該如何將JSpinner鏈接到JOptionPane?(我創建的btnEnter,我添加了ChangeListener,然后怎么辦?)

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。 ; 導入java.awt.Container; 導入java.util.Calendar; 導入java.util.Date; 導入javax.swing.event。 ; 導入java.awt.event。*; 導入java.awt.Graphics; 導入java.lang.Comparable; 導入javax.swing.JOptionPane; 導入javax.swing.JDialog; 導入java.awt.Dimension; 導入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);
    }
}

}

ChangeListener用於JSpinner dateJs而不是JButton btnEnter 您可以使用:

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窗口。
  • Sun / Oracle建議使用布局管理器 -它們可以管理組件的大小和位置。
  • 除了DoubleBufferedPanel中的paint方法為空之外,Swing中的自定義繪畫應通過重寫paintComponent並調用super.paintComponent(g)

編輯:

您正在隱藏dialog變量。 更換

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM