2016-05-17 6 views
0

trueまたはfalseをチェックするif文、JFrameに事柄を追加するenterGame、ブール値を変更するボタンがあります。一度それが空になったらJFrame内の物を置き換える。私はそれからすべてを削除すると、フレームを再描画しません。クリスタルは私の先生であり、私たちはどちらも困惑しています。フレームは空ではなく、if文で再描画されます

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

答えて

0

コードには2つの誤りがあります。まず、文字列を二重等号(==)と比較しています。これはあなたの仕事を決してしません。 Javaでは、比較しているものがプリミティブ型(Stringではない)でない場合、参照比較を行います。したがって、あなたの比較buttonName == 何かは真を返すことはありません。

次に、mainPanelの表示を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]); 
     } 
    } 
} 
関連する問題