有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java框架不会为空并使用if语句重新绘制

我有一个if语句来检查是真是假,enterGame,它会将内容添加到JFrame,有一个按钮会将布尔值更改为true,并在JFrame清空后尝试替换其中的内容。一旦我把所有的东西都移走,它就不会重新粉刷我的画框。克里斯托是我的老师,我们都被难倒了

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

public class GUIDemo implements ActionListener
{
int mapX, mapY;

private JFrame mainFrame;
private JLabel headerLabel;
private JLabel statusLabel;
private JPanel controlPanel;
private JPanel mainPanel = new JPanel();
private JPanel logonPanel = new JPanel();
private JLabel msglabel;
private JButton logButton;
boolean enterGame = false;
JLabel userLabel = new JLabel("Username:", JLabel.CENTER);
JLabel passLabel = new JLabel("Password:", JLabel.CENTER);

JLabel[][] maplabels = new JLabel[3][3];

public String[][] placeNames = { {"Forest", "Desert", "Jungle"}, 
{"Ice Cave", "Village", "Wizard's Tower"}, 
{"Lake", "Moutain", "Ocean"}};

public GUIDemo()
{
prepareGUI();
}

public static void main(String[] args)
{
GUIDemo swingDemo = new GUIDemo(); 
swingDemo.showDemo(); 
}

private void prepareGUI()
{
mainFrame = new JFrame("Swing Demo");
mainFrame.setSize(350,200);
mainFrame.setLayout(new BorderLayout());

mainPanel.setLayout(new BorderLayout());
logonPanel.setLayout(new GridLayout(3, 1));

//mainFrame.setLayout(null);

headerLabel = new JLabel("",JLabel.CENTER );
statusLabel = new JLabel("",JLabel.CENTER); 

mainFrame.addWindowListener(new WindowAdapter() 
{
public void windowClosing(WindowEvent windowEvent)
{
System.exit(0);
} 
}); 
controlPanel = new JPanel();
controlPanel.setLayout(new FlowLayout());

mainFrame.add(logonPanel, BorderLayout.CENTER);
//mainFrame.add(mainPanel, BorderLayout.CENTER);
//mainFrame.add(statusLabel);
mainPanel.setVisible(false); 
logonPanel.setVisible(true); 

mainFrame.setVisible(true); 

}

private void showDemo()
{ 
if (enterGame == true)
{
//logonPanel.setVisible(false); 

//mainFrame.setVisible(false); 
mainFrame.remove(logonPanel);
mainFrame.validate();
mainFrame.repaint();
//mainFrame.removeAll();
headerLabel.setText("Location: " + placeNames[mapX][mapY]);

JPanel panel = new JPanel();
JPanel panel2 = new JPanel();
panel.setSize(300,300);
panel2.setSize(300,300);
GridLayout compassLayout = new GridLayout(3,3);

JButton button1 = new JButton("");
JButton button2 = new JButton("North");
JButton button3 = new JButton("");
JButton button4 = new JButton("West");
JButton button5 = new JButton("");
JButton button6 = new JButton("East");
JButton button7 = new JButton("");
JButton button8 = new JButton("South");
JButton button9 = new JButton("");
button1.setVisible (false);
button2.addActionListener(this);
button3.setVisible (false);
button4.addActionListener(this);
button5.setVisible (false);
button6.addActionListener(this);
button7.setVisible (false);
button8.addActionListener(this);
button9.setVisible (false);


GridLayout MapLayout = new GridLayout(3,3);

maplabels[0][0] = new JLabel("F", JLabel.CENTER);
maplabels[0][1] = new JLabel("D", JLabel.CENTER);
maplabels[0][2] = new JLabel("J", JLabel.CENTER);
maplabels[1][0] = new JLabel("I", JLabel.CENTER);
maplabels[1][1] = new JLabel("V", JLabel.CENTER);
maplabels[1][2] = new JLabel("W", JLabel.CENTER);
maplabels[2][0] = new JLabel("L", JLabel.CENTER);
maplabels[2][1] = new JLabel("M", JLabel.CENTER);
maplabels[2][2] = new JLabel("O", JLabel.CENTER);

panel.setBorder(BorderFactory.createLineBorder(Color.black));
panel.setLayout(compassLayout); 
panel.add(button1);
panel.add(button2); 
panel.add(button3); 
panel.add(button4); 
panel.add(button5); 
panel.add(button6); 
panel.add(button7); 
panel.add(button8); 
panel.add(button9); 

panel2.setBorder(BorderFactory.createLineBorder(Color.black));
panel2.setLayout(MapLayout); 
panel2.add(maplabels[0][0]);
panel2.add(maplabels[0][1]); 
panel2.add(maplabels[0][2]); 
panel2.add(maplabels[1][0]); 
panel2.add(maplabels[1][1]); 
panel2.add(maplabels[1][2]); 
panel2.add(maplabels[2][0]); 
panel2.add(maplabels[2][1]); 
panel2.add(maplabels[2][2]); 

mainPanel.add(headerLabel, BorderLayout.PAGE_START);
mainPanel.add(panel, BorderLayout.LINE_START);
mainPanel.add(panel2, BorderLayout.CENTER);
mainFrame.add(mainPanel, BorderLayout.CENTER);
}
else
{
//mainFrame.removeAll();
BorderLayout borderUser = new BorderLayout();
BorderLayout borderPass = new BorderLayout();
JPanel userPanel = new JPanel(borderUser);
JPanel passPanel = new JPanel(borderPass);
logButton = new JButton("Log On");
logButton.addActionListener(this);


JTextField userField = new JTextField();
JTextField passField = new JTextField();

userPanel.add(userLabel, BorderLayout.CENTER);
userPanel.add(userField, BorderLayout.PAGE_END);

passPanel.add(passLabel, BorderLayout.CENTER);
passPanel.add(passField, BorderLayout.PAGE_END);

logonPanel.add(userPanel);
logonPanel.add(passPanel);
logonPanel.add(new JPanel());
logonPanel.add(logButton); 
}

mainFrame.validate();
mainFrame.repaint();
mainFrame.setVisible(true); 
}

public void actionPerformed(ActionEvent e) 
{
String buttonName = ((JButton) e.getSource()).getText(); 
//userLabel.setText(buttonName);

if(buttonName == "Log On")
{
//userLabel.setText("HI");
enterGame = true;
this.showDemo(); 

}
else
{
maplabels[mapX][mapY].setBorder(BorderFactory.createEmptyBorder());

if(buttonName == "North")
{
mapX = (3 + mapX - 1)% 3;
}
if(buttonName == "South")
{
mapX = (3 + mapX + 1)% 3;
}
if(buttonName == "West")
{
mapY = (3 + mapY - 1)% 3;
}
if(buttonName == "East")
{
mapY = (3 + mapY + 1)% 3;
} 

maplabels[mapX][mapY].setBorder(BorderFactory.createLineBorder(Color.blue));
headerLabel.setText("Location: " + placeNames[mapX][mapY]);
} 
}
}

共 (1) 个答案

  1. # 1 楼答案

    代码中有两个错误。首先,将字符串与双等号进行比较,即(==)。这永远不会完成你的工作。在java中,如果要比较的对象不是基元类型(哪个字符串不是基元类型),那么它将进行引用比较。因此,你的比较按钮name==某些东西永远不会返回真值

    其次,登录后会出现一个空白窗口,因为尚未将主面板的可见性设置为true。下面是正确的代码:

    public class GUIDemo implements ActionListener
    {
        int mapX, mapY;
    
        private JFrame mainFrame;
        private JLabel headerLabel;
        private JLabel statusLabel;
        private JPanel controlPanel;
        private JPanel mainPanel = new JPanel();
        private JPanel logonPanel = new JPanel();
        private JLabel msglabel;
        private JButton logButton;
        boolean enterGame = false;
        JLabel userLabel = new JLabel("Username:", JLabel.CENTER);
        JLabel passLabel = new JLabel("Password:", JLabel.CENTER);
    
        JLabel[][] maplabels = new JLabel[3][3];
    
        public String[][] placeNames = { {"Forest", "Desert", "Jungle"}, 
                                         {"Ice Cave", "Village", "Wizard's Tower"}, 
                                         {"Lake", "Moutain", "Ocean"}};
    
        public GUIDemo()
        {
            prepareGUI();
        }
    
        public static void main(String[] args)
        {
            GUIDemo swingDemo = new GUIDemo(); 
            swingDemo.showDemo(); 
        }
    
        private void prepareGUI()
        {
            mainFrame = new JFrame("Swing Demo");
            mainFrame.setSize(350,200);
            mainFrame.setLayout(new BorderLayout());
    
            mainPanel.setLayout(new BorderLayout());
            logonPanel.setLayout(new GridLayout(3, 1));
    
            //mainFrame.setLayout(null);
    
            headerLabel = new JLabel("",JLabel.CENTER );
            statusLabel = new JLabel("",JLabel.CENTER); 
    
            mainFrame.addWindowListener(new WindowAdapter() 
            {
            public void windowClosing(WindowEvent windowEvent)
            {
            System.exit(0);
            } 
            }); 
            controlPanel = new JPanel();
            controlPanel.setLayout(new FlowLayout());
    
            mainFrame.add(logonPanel, BorderLayout.CENTER);
            //mainFrame.add(mainPanel, BorderLayout.CENTER);
            //mainFrame.add(statusLabel);
            mainPanel.setVisible(false); 
            logonPanel.setVisible(true); 
    
            mainFrame.setVisible(true); 
    
        }
    
        private void showDemo()
        { 
            if (enterGame == true)
            {
    
                //logonPanel.setVisible(false); 
    
                //mainFrame.setVisible(false); 
                mainFrame.remove(logonPanel);
                mainFrame.revalidate();
                mainFrame.repaint();
                //mainFrame.removeAll();
                headerLabel.setText("Location: " + placeNames[mapX][mapY]);
    
                JPanel panel = new JPanel();
                JPanel panel2 = new JPanel();
                panel.setSize(300,300);
                panel2.setSize(300,300);
                GridLayout compassLayout = new GridLayout(3,3);
    
                JButton button1 = new JButton("");
                JButton button2 = new JButton("North");
                JButton button3 = new JButton("");
                JButton button4 = new JButton("West");
                JButton button5 = new JButton("");
                JButton button6 = new JButton("East");
                JButton button7 = new JButton("");
                JButton button8 = new JButton("South");
                JButton button9 = new JButton("");
                button1.setVisible (false);
                button2.addActionListener(this);
                button3.setVisible (false);
                button4.addActionListener(this);
                button5.setVisible (false);
                button6.addActionListener(this);
                button7.setVisible (false);
                button8.addActionListener(this);
                button9.setVisible (false);
    
    
                GridLayout MapLayout = new GridLayout(3,3);
    
                maplabels[0][0] = new JLabel("F", JLabel.CENTER);
                maplabels[0][1] = new JLabel("D", JLabel.CENTER);
                maplabels[0][2] = new JLabel("J", JLabel.CENTER);
                maplabels[1][0] = new JLabel("I", JLabel.CENTER);
                maplabels[1][1] = new JLabel("V", JLabel.CENTER);
                maplabels[1][2] = new JLabel("W", JLabel.CENTER);
                maplabels[2][0] = new JLabel("L", JLabel.CENTER);
                maplabels[2][1] = new JLabel("M", JLabel.CENTER);
                maplabels[2][2] = new JLabel("O", JLabel.CENTER);
    
                panel.setBorder(BorderFactory.createLineBorder(Color.black));
                panel.setLayout(compassLayout); 
                panel.add(button1);
                panel.add(button2); 
                panel.add(button3); 
                panel.add(button4); 
                panel.add(button5); 
                panel.add(button6); 
                panel.add(button7); 
                panel.add(button8); 
                panel.add(button9); 
    
                panel2.setBorder(BorderFactory.createLineBorder(Color.black));
                panel2.setLayout(MapLayout); 
                panel2.add(maplabels[0][0]);
                panel2.add(maplabels[0][1]); 
                panel2.add(maplabels[0][2]); 
                panel2.add(maplabels[1][0]); 
                panel2.add(maplabels[1][1]); 
                panel2.add(maplabels[1][2]); 
                panel2.add(maplabels[2][0]); 
                panel2.add(maplabels[2][1]); 
                panel2.add(maplabels[2][2]); 
    
                mainPanel.add(headerLabel, BorderLayout.PAGE_START);
                mainPanel.add(panel, BorderLayout.LINE_START);
                mainPanel.add(panel2, BorderLayout.CENTER);
                mainFrame.add(mainPanel, BorderLayout.CENTER);
                mainPanel.setVisible(true);
    
            }
            else
            {
                //mainFrame.removeAll();
                BorderLayout borderUser = new BorderLayout();
                BorderLayout borderPass = new BorderLayout();
                JPanel userPanel = new JPanel(borderUser);
                JPanel passPanel = new JPanel(borderPass);
                logButton = new JButton("Log On");
                logButton.addActionListener(this);
    
    
                JTextField userField = new JTextField();
                JTextField passField = new JTextField();
    
                userPanel.add(userLabel, BorderLayout.CENTER);
                userPanel.add(userField, BorderLayout.PAGE_END);
    
                passPanel.add(passLabel, BorderLayout.CENTER);
                passPanel.add(passField, BorderLayout.PAGE_END);
    
                logonPanel.add(userPanel);
                logonPanel.add(passPanel);
                logonPanel.add(new JPanel());
                logonPanel.add(logButton); 
            }
    
            //mainFrame.getContentPane().validate();
            //mainFrame.getContentPane().repaint();
            mainFrame.setVisible(true); 
        }
    
        public void actionPerformed(ActionEvent e) 
        {
            String buttonName = ((JButton) e.getSource()).getText(); 
    
    
            if(buttonName.equals("Log On"))
            {
    
                this.enterGame = true;
                this.showDemo(); 
    
            }
            else
            {
                maplabels[mapX][mapY].setBorder(BorderFactory.createEmptyBorder());
    
                if(buttonName.equals("North"))
                {
                    mapX = (3 + mapX - 1)% 3;
                }
                if(buttonName.equals("South"))
                {
                    mapX = (3 + mapX + 1)% 3;
                }
                if(buttonName.equals("West"))
                {
                    mapY = (3 + mapY - 1)% 3;
                }
                if(buttonName.equals("East"))
                {
                    mapY = (3 + mapY + 1)% 3;
                } 
    
                maplabels[mapX][mapY].setBorder(BorderFactory.createLineBorder(Color.blue));
                headerLabel.setText("Location: " + placeNames[mapX][mapY]);
            } 
        }
    }