簡體   English   中英

JButtons,ActionListener和JOptionPane

[英]JButtons, ActionListener, and JOptionPane

我正在嘗試給出一個彈出式JOptionPane MessageDialog,如果勾選或未勾選所需的項目,但我什么也得不到。 基本上我正在檢查使用動作偵聽器按下哪個按鈕,然后檢查在上一個窗口中選擇了哪個用戶。 如果不允許用戶,那么它應該顯示一個彈出消息對話框告訴他們,否則它應該檢查是否在JCheckBox中勾選了所需的項目,如果勾選了正確的項目,它應該顯示一個消息對話框“歡迎”他們進入房間。

這些課程是在很久以前制作的,我知道我應該更好地命名它們以及我的變量。 這是一個相當古老的項目,我從來沒有完成,所以我編程的方式有很多缺陷,所以請不要打電話給我,盡管提示是受歡迎的。

即使我說這是一個古老的項目,我仍然不擅長Java,我仍然在學習,所以我的代碼顯然並不完美。

一些名字和信息都在南非荷蘭語中,所以如果你有什么不明白的地方請問,我會為你改變它。

我無法弄清楚如何使用網站的代碼突出顯示,我希望我做得對,抱歉。

主要課程:

import javax.swing.JFrame;

public class main {
public static void main(String args[]){

    window1 w1Ob = new window1();
    w1Ob.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    w1Ob.setSize(250,250);
    w1Ob.setVisible(true);
    w1Ob.setLocationRelativeTo(null);
    w1Ob.setResizable(true);

}
}

第一窗口類:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

//has to extend JFrame to use content from JFrame, cannot import to here but can to main class, not sure how it 
//works
public class window1 extends JFrame{

//creating window2 object to run window2 if inserted password is correct
window2 wO2 = new window2();

//adds needed variables
//adds jlist which is the used list
private JList list;
//names used in the jlist, jlist uses string array
private static String[] usernames = {"Jannie", "Heloise", "Juan", "Chane"};
//font used to make text larger
Font font = new Font("Sans-Serif", Font.BOLD, 24);
//attempt at making a password array that stores all the passwords as strings then is used in an if statement 
//to check if correct
private static int[] passwords = {1, 2, 3, 4};
//creating variable to know which user is logged in
public int loggedUser;

//constructor to create the window
public window1(){
    //title
    super("Project");
    //the layout used, FlowLayout, most basic layout as temporary solution until learning new one
    setLayout(new FlowLayout());

    //tells the jlist to use the usernames string array to display in the list, meaning it will display 
    //Jannie on list 1, Heloise on line 2, etc.
    list = new JList(usernames);
    //tells the jlist how many lines to display, if array contains > 4 strings and is told to display only 
    //4 it will give a scroll bar
    list.setVisibleRowCount(4);
    //makes sure only 1 item in the list is selected
    list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    //sets the jlist lists' font to preset font in variable at the top of the class
    list.setFont(font);
    //adds the jlist to the screen
    add(new JScrollPane(list));

    //adds the listener to wait for the user to select an item in the list, thus "ListSelection"
    list.addListSelectionListener(
            //anonymous class insides parameters for adding the listener to list
            new ListSelectionListener(){
                //obligatory overwrite, parameters of "ListSelectionEvent event" obligatory, not sure what 
                //it does...
                public void valueChanged(ListSelectionEvent event){
                    //creating the OptionPane for the password
                    String pass = JOptionPane.showInputDialog(null, "Enter Password");
                    //converts pass to string under variable name i
                    int i = Integer.parseInt(pass);
                    //checks if entered value is equal to the value in the array, example, Jannie = list[0] 
                    //because it's the first value in array list and 1 = pass[0] since it's the first value 
                    //in array passwords, thus if 1 is entered it will be correct because it's the 
                    //corresponding value in the arrays
                    if(i == passwords[list.getSelectedIndex()]){
                        int selectedValue = list.getSelectedIndex();
                        if(selectedValue == 0){
                            loggedUser = 1;
                        }
                        else if(selectedValue == 1){
                            loggedUser = 2;
                        }
                        else if(selectedValue == 2){
                            loggedUser = 3;
                        }
                        else if(selectedValue == 3){
                            loggedUser = 4;
                        }
                        wO2.setDefaultCloseOperation(EXIT_ON_CLOSE);
                        wO2.setSize(500, 500);
                        wO2.setVisible(true);
                        wO2.setLocationRelativeTo(null);
                        wO2.setResizable(true);
                    }
                }
         }
     );

}

}

第二窗口類:

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;
import javax.swing.event.*;

public class window2 extends JFrame{

//adding JButton variables for each button on the screen
private JButton garage;
private JButton kombuis;
private JButton badkamer;
private JButton mancave;
//adding JCheckBox variables for each required item
public JCheckBox sleutel;
public JCheckBox helmet;
public JCheckBox voorskoot;
public JCheckBox beker;
public JCheckBox handdoek;
public JCheckBox seep;
public JCheckBox musiek;
//adding String variable to tell the user what he requires to enter the area he wants
private String youNeed;


private JButton button;


public window2(){
    //title
    super("Access");
    //3 rows (int), 4 columns (int), 15 px horizontal gap (int), 15 px vertical gap (int)
    setLayout(new GridLayout(3, 4, 2, 5));

    //gives parameters for garage, puts text "Garage" on the button
    garage = new JButton("Garage");
    //adds garage JButton to the screen
    add(garage);

    //gives parameters for kombuis, puts text "Kombuis" on the button
    kombuis = new JButton("Kombuis");
    //adds kombuis JButton to the screen
    add(kombuis);

    //gives parameters for badkamer, puts text "Badkamer" on the button
    badkamer = new JButton("Badkamer");
    //adds badkamer JButton to the screen
    add(badkamer);

    //gives parameters for mancave, puts text "Mancave" on the button
    mancave = new JButton("Mancave");
    //adds mancave JButton to the screen
    add(mancave);

    sleutel = new JCheckBox("Sleutel");
    add(sleutel);
    helmet = new JCheckBox("Helmet");
    add(helmet);
    voorskoot = new JCheckBox("Voorskoot");
    add(voorskoot);
    beker = new JCheckBox("Beker");
    add(beker);
    handdoek = new JCheckBox("Handdoek");
    add(handdoek);
    seep = new JCheckBox("Seep");
    add(seep);
    musiek = new JCheckBox("Musiek");
    add(musiek);

    HandlerClass handler = new HandlerClass();
    //adds action listeners for following button to wait for user to select one
    garage.addActionListener(handler);
    kombuis.addActionListener(handler);
    badkamer.addActionListener(handler);
    mancave.addActionListener(handler);

}

private class HandlerClass implements ActionListener{
    public void actionPerformed(ActionEvent event){

        //create window1 object to use loggedUser variable from window1
        window1 wo1 = new window1();

        //create variable using window1 object to use loggedUser variable in window2 class
        int loggedU = wo1.loggedUser;

        if(event.getActionCommand().equals(garage)){
            if(loggedU == 1){
                if(sleutel.isSelected() && helmet.isSelected()){
                    JOptionPane.showMessageDialog(null, "Welcome to the garage, Jannie");
                }
                else{
                    if(sleutel.isSelected()){
                        youNeed = "Helmet";
                    }
                    else if(helmet.isSelected()){
                        youNeed = "Sleutel";
                    }
                    JOptionPane.showMessageDialog(null, "You do not have the required items, you need: " + youNeed);
                }
            }
            else if(loggedU == 3){
                if(sleutel.isSelected() && helmet.isSelected()){
                    JOptionPane.showMessageDialog(null, "Welcome to the garage, Juan");
                }
                else{
                    if(sleutel.isSelected()){
                        youNeed = "Helmet";
                    }
                    else if(helmet.isSelected()){
                        youNeed = "Sleutel";
                    }
                    JOptionPane.showMessageDialog(null, "You do not have the required items, you need: " + youNeed);
                }
            }
            else{
                JOptionPane.showMessageDialog(null, "You're not allowed in here");
            }
        }
        if(event.getActionCommand().equals(badkamer)){
            if(loggedU == 1){
                if(handdoek.isSelected() && seep.isSelected()){
                    JOptionPane.showMessageDialog(null, "Welcome to the bathroom, Jannie");
                }
                else{
                    if(handdoek.isSelected()){
                        youNeed = "Seep";
                    }
                    else if(seep.isSelected()){
                        youNeed = "Handdoek";
                    }
                    JOptionPane.showMessageDialog(null, "You do not have the required items, you need: " + youNeed);
                }
            }
            else if(loggedU == 2){
                if(handdoek.isSelected() && seep.isSelected()){
                    JOptionPane.showMessageDialog(null, "Welcome to the bathroom, Heloise");
                }
                else{
                    if(handdoek.isSelected()){
                        youNeed = "Seep";
                    }
                    else if(seep.isSelected()){
                        youNeed = "Handdoek";
                    }
                    JOptionPane.showMessageDialog(null, "You do not have the required items, you need: " + youNeed);
                }
            }
            else if(loggedU == 3){
                if(handdoek.isSelected() && seep.isSelected()){
                    JOptionPane.showMessageDialog(null, "Welcome to the bathroom, Juan");
                }
                else{
                    if(handdoek.isSelected()){
                        youNeed = "Seep";
                    }
                    else if(seep.isSelected()){
                        youNeed = "Handdoek";
                    }
                    JOptionPane.showMessageDialog(null, "You do not have the required items, you need: " + youNeed);
                }
            }
            else if(loggedU == 4){
                if(handdoek.isSelected() && seep.isSelected()){
                    JOptionPane.showMessageDialog(null, "Welcome to the bathroom, Chane");
                }
                else{
                    if(handdoek.isSelected()){
                        youNeed = "Seep";
                    }
                    else if(seep.isSelected()){
                        youNeed = "Handdoek";
                    }
                    JOptionPane.showMessageDialog(null, "You do not have the required items, you need: " + youNeed);
                }
            }
        }
        if(event.getActionCommand().equals(kombuis)){
            if(loggedU == 2){
                if(voorskoot.isSelected() && beker.isSelected()){
                    JOptionPane.showMessageDialog(null, "Welcome to the kombuis, Heloise");
                }
                else{
                    if(voorskoot.isSelected()){
                        youNeed = "beker";
                    }
                    else if(beker.isSelected()){
                        youNeed = "voorskoot";
                    }
                    JOptionPane.showMessageDialog(null, "You do not have the required items, you need: " + youNeed);
                }
            }
            else if(loggedU == 4){
                if(voorskoot.isSelected() && beker.isSelected()){
                    JOptionPane.showMessageDialog(null, "Welcome to the kombuis, Chane");
                }
                else{
                    if(voorskoot.isSelected()){
                        youNeed = "beker";
                    }
                    else if(beker.isSelected()){
                        youNeed = "voorskoot";
                    }
                    JOptionPane.showMessageDialog(null, "You do not have the required items, you need: " + youNeed);
                }
            }
            else{
                JOptionPane.showMessageDialog(null, "You're not allowed in here");
            }
        }
        if(event.getActionCommand().equals(mancave)){
            if(loggedU == 1){
                if(musiek.isSelected()){
                    JOptionPane.showMessageDialog(null, "Welcome to the mancave, Jannie");
                }
                else{
                    youNeed = "musiek";
                    JOptionPane.showMessageDialog(null, "You do not have the required items, you need: " + youNeed);
                }
            }
            else{
                JOptionPane.showMessageDialog(null, "You're not allowed in here");
            }
        }
    }
}
}

提前感謝任何解決/解決方案的嘗試。

關於這段代碼:

private class HandlerClass implements ActionListener {
  public void actionPerformed(ActionEvent event) {
     window1 wo1 = new window1();  // ***** problem is here *****
     int loggedU = wo1.loggedUser;
     if (event.getActionCommand().equals(garage)) {

為了調試目的,我改為:

private class HandlerClass implements ActionListener {
  public void actionPerformed(ActionEvent event) {
     window1 wo1 = new window1();  // ***** problem is here *****
     int loggedU = wo1.loggedUser;
     System.out.println("action command: " + event.getActionCommand()); //!!
     System.out.println("loggedU: " + loggedU);
     if (event.getActionCommand().equals(garage)) {

你會看到loggedU總是返回0

你的問題是一個常見的新手錯誤 - 你正在創建一個新的window1對象,w02,並假設它的狀態與之前創建的window1對象相同,而這不是Java的工作方式。 要獲取原始window1對象的狀態,您需要測試它,而不是新的不同實例。


例如,

import java.awt.Dialog.ModalityType;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.Window;

import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

public class MyTest {
   private static void createAndShowGui() {
      MainGuiPanel mainGuiPanel = new MainGuiPanel();

      final JFrame frame = new JFrame("MyTest");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.getContentPane().add(mainGuiPanel);
      frame.pack();
      frame.setLocationRelativeTo(null);
      // frame.setVisible(true);

      DialogPanel dialogPanel = new DialogPanel();
      JDialog dialog = new JDialog(frame, "Select User", ModalityType.APPLICATION_MODAL);
      dialog.add(dialogPanel);
      dialog.pack();
      dialog.setLocationRelativeTo(null);
      // show modal dialog
      dialog.setVisible(true);

      // here dialog is no longer visible

      // extract datat from dialog's dialogPanel
      String selectedUser = dialogPanel.getSelectedName();
      // put into the main GUI
      mainGuiPanel.setSelectedUser(selectedUser);
      // now show the main GUI's JFrame
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}

class MainGuiPanel extends JPanel {
   private static final long serialVersionUID = 1L;
   private JButton doItButton = new JButton(new DoItAction("Do It!", KeyEvent.VK_D));
   private String selectedUser;

   public MainGuiPanel() {
      add(doItButton);
   }

   public void setSelectedUser(String selectedUser) {
      this.selectedUser = selectedUser;
   }

   private class DoItAction extends AbstractAction {
      public DoItAction(String name, int mnemonic) {
         super(name);
         putValue(MNEMONIC_KEY, mnemonic);
      }

      @Override
      public void actionPerformed(ActionEvent e) {
         System.out.println("Selected User: " + selectedUser);
      }
   }
}

class DialogPanel extends JPanel {
   private static final long serialVersionUID = 1L;
   public static final String[] USER_NAMES = { "Jannie", "Heloise", "Juan", "Chane" };
   private JList<String> userList = new JList<>(USER_NAMES);
   private String selectedName;

   public DialogPanel() {
      userList.addListSelectionListener(new UserListListener());
      add(new JScrollPane(userList));
   }

   public String getSelectedName() {
      return selectedName;
   }

   private class UserListListener implements ListSelectionListener {

      @Override
      public void valueChanged(ListSelectionEvent e) {
         if (!e.getValueIsAdjusting()) {
            selectedName = userList.getSelectedValue();
            if (selectedName != null) {
               Window win = SwingUtilities.getWindowAncestor(DialogPanel.this);
               win.dispose();
            }
         }
      }
   }
}

編輯
您的代碼未考慮字符串大小寫!

更改:

if (event.getActionCommand().equals(garage)) {

至:

if (event.getActionCommand().equalsIgnoreCase(garage)) {

暫無
暫無

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

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