Java JButton 在 If 语句中不创建

标签 java swing user-interface user-input

我正在开发一个 Java GUI 程序,它只是一个练习/示例程序,用于检查旅馆中哪些房间是空的,并将它们保留给一群人。我的问题是我需要在按下“检查房间可用性”之后显示一个 JButton,如果 RoomsArray 中有一个值为 0 的索引。我能够在按下该按钮后显示一个 JTextPane但是如果我的"is"JButton 在 If 语句中,它不会出现,如果它在 If 语句之外它工作正常但我需要它只在按下“检查房间可用性”按钮后出现。感谢您的帮助!

package text;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.Toolkit;

import javax.swing.JTextPane;

import java.awt.Color;

import javax.swing.UIManager;

import java.awt.Font;
import java.awt.Choice;
import javax.swing.JButton;

import org.apache.commons.lang3.ArrayUtils;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JMenu;

@SuppressWarnings("serial")
public class HotelReservationGUI extends JFrame {
    private JPanel contentPane;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    HotelReservationGUI frame = new HotelReservationGUI();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     * @return 
     */ 
    public HotelReservationGUI() {

        contentPane = new JPanel();

        final int[] RoomsArray = new int[10];

        RoomsArray[0] = (int) ((10 * Math.random()) - 1);
        RoomsArray[1] = (int) ((10 * Math.random()) - 1);
        RoomsArray[2] = (int) ((10 * Math.random()) - 1);
        RoomsArray[3] = (int) ((10 * Math.random()) - 1);
        RoomsArray[4] = (int) ((10 * Math.random()) - 1);
        RoomsArray[5] = (int) ((10 * Math.random()) - 1);
        RoomsArray[6] = (int) ((10 * Math.random()) - 1);
        RoomsArray[7] = (int) ((10 * Math.random()) - 1);
        RoomsArray[8] = (int) ((10 * Math.random()) - 1);
        RoomsArray[9] = (int) ((10 * Math.random()) - 1);

        setResizable(false);
        setIconImage(Toolkit.getDefaultToolkit().getImage(HotelReservationGUI.class.getResource("/text/Hotel Icon.png")));
        setTitle("Hotel Reservation");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 500, 500);
        JMenuBar menuBar = new JMenuBar();
        setJMenuBar(menuBar);

        JMenu MenuFile = new JMenu("File");
        menuBar.add(MenuFile);

        JMenuItem MenuItemExit = new JMenuItem("Exit");
        MenuFile.add(MenuItemExit);
        MenuItemExit.setToolTipText("Exit application");
        contentPane.setBackground(UIManager.getColor("Button.light"));
        contentPane.setBorder(new EmptyBorder(0, 0, 0, 0));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JTextPane WelcomeToHotel = new JTextPane();
            WelcomeToHotel.setBackground(UIManager.getColor("Button.light"));
            WelcomeToHotel.setFont(new Font("Tahoma", Font.BOLD, 13));
            WelcomeToHotel.setText("Welcome to Hotel Reservation!");
            WelcomeToHotel.setBounds(10, 10, 208, 20);
            contentPane.add(WelcomeToHotel);
            MenuItemExit.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent event) {
                    System.exit(0);
                }
            });

        JTextPane EnterYourNumber = new JTextPane();
            EnterYourNumber.setFont(new Font("Tahoma", Font.BOLD, 13));
            EnterYourNumber.setBounds(10, 40, 198, 44);
            EnterYourNumber.setBackground(UIManager.getColor("Button.light"));
            EnterYourNumber.setForeground(Color.BLACK);
            EnterYourNumber.setEditable(false);
            EnterYourNumber.setText("Enter your number of guests:");
            contentPane.add(EnterYourNumber);

        Choice Guests = new Choice();
            Guests.setBounds(214, 40, 64, 20);
            contentPane.add(Guests);
            Guests.add("1");
            Guests.add("2");
            Guests.add("3");
            Guests.add("4");
            Guests.add("5");
            Guests.add("6");
            Guests.add("7");
            Guests.add("8");

        Object GuestsNumber = ((Choice) Guests).getSelectedItem();

        JButton CheckRoomAvailability = new JButton("Check Room Availability");
            CheckRoomAvailability.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent arg0) 
                {
                if (ArrayUtils.contains(RoomsArray, 0)) 
                {
                    //This button won't appear while in the If Statement.
                    JButton ReserveRoomYes = new JButton("Yes");
                    ReserveRoomYes.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent arg0) 
                        {

                        }
                    });
                    ReserveRoomYes.setBounds(288, 300, 55, 20);
                    contentPane.add(ReserveRoomYes);

                    JTextPane RoomAvailableTXT = new JTextPane();
                        RoomAvailableTXT.setFont(new Font("Tahoma", Font.BOLD, 13));
                        RoomAvailableTXT.setText("A room is available! \nWould you like to reserve this room?");
                        RoomAvailableTXT.setBounds(10, 70, 300, 200);
                        contentPane.add(RoomAvailableTXT);
                }
                else 
                {
                    JTextPane RoomNotAvailableTXT = new JTextPane();
                        RoomNotAvailableTXT.setFont(new Font("Tahoma", Font.BOLD, 13));
                        RoomNotAvailableTXT.setText("No rooms are available, please try again later.");
                        RoomNotAvailableTXT.setBounds(10, 70, 300, 200);
                        contentPane.add(RoomNotAvailableTXT);
                }
                }
            });
            CheckRoomAvailability.setBounds(288, 40, 170, 20);
            contentPane.add(CheckRoomAvailability);
    }
}

最佳答案

另一种方法是先在您的页面上创建按钮,然后立即

jButton.setVisible(false);

您的 GUI 将像按钮不存在一样显示。每当显示按钮时,您只需调用

jButton.setVisible(true);

完成按钮后,您可以再次隐藏它。

关于Java JButton 在 If 语句中不创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25247519/

相关文章:

java - 无法使用 Quarkus 找到请求目标的有效认证路径

java - 在 GridLayout 中居中单选按钮

java - 如何使 JCombobox 具有更改其他 JCombobox 上的项目的功能

qt - QWebSocketServer 到不同的线程

java - 数据插入 mongoDB 集合后触发 MongoDB 事件

java - 为什么当我运行代码时会安装某些东西?

java.lang.OutOfMemory错误: Java heap space error occured when repeat calling of a function

Android:这是什么菜单布局?

java - 使用可从资源中绘制的位图初始化位图变量不起作用 - 使用 ANDROID

java - 一个非常基本的 applet/swing 要求