2012-03-16 108 views
-1

所以我在這裏失去了一些東西,但我無法讓我的setAttributes方法更新敏捷文本字段,就像它應該的那樣。調用方法和調用的類可以正常傳遞所需的值,如system.out.println(agility)所示。但是,在下面的行中,我嘗試設置agilityAmount txtfield,但不顯示。我究竟做錯了什麼?我的setText沒有更新我的JTextField?

class GraphicalInterface extends JFrame implements Runnable, KeyListener 
{ 


    GraphicalInterface() { 
    } 
    JFrame mainwindow; 

    //declare panels 
    JPanel panel1=new JPanel(); 
    JPanel panel2=new JPanel(); 
    JPanel invictusWelcome=new JPanel(); 
    JPanel gameStartQuit=new JPanel(); 
    JPanel panel3=new JPanel(); 
    JPanel panel4=new JPanel(); 
    JPanel panel5=new JPanel(); 
    JPanel panel6=new JPanel(); 
    JPanel panel7=new JPanel(new GridLayout(7, 1)); 
    JPanel mappanel=new JPanel(); 
    JPanel attribpanel=new JPanel(new GridLayout(12,0)); 

    //declare buttons 
    JButton startGame; 
    JButton quitButton; 
    JButton mapButton; 
    JButton townButton; 
    JButton castleButton; 
    JButton forestButton; 
    JButton exitButton; 
    JButton fighterSelect; 
    JButton hybridSelect; 
    JButton magicSelect; 
    JButton characterConfirm; 

    //declare labels 
    JLabel agility=new JLabel("Agility:"); 
    JLabel health=new JLabel("Health: "); 
    JLabel mana=new JLabel("Mana: "); 
    JLabel strength=new JLabel("Strength: "); 
    JLabel intelligence=new JLabel("Intelligence: "); 
    JLabel charNameLabel=new JLabel("Name: "); 
    JTextField charNameLabelField=new JTextField(); 
    JTextField healthAmount=new JTextField(); 
    JTextField manaAmount=new JTextField(); 
    JTextField currentHealthAmount=new JTextField(); 
    JTextField currentManaAmount=new JTextField(); 
    JTextField strengthAmount=new JTextField(); 
    JTextField agilityAmount=new JTextField(); 
    JTextField intelligenceAmount=new JTextField(); 


    JTextField description; 

    //declares attribute values 
    String name=""; 
    int agi=0; 
    int str=0; 
    int intel=0; 
    int currentHealth=0; 
    int maxHealth=0; 
    int currentMana=0; 
    int maxMana=0; 
    int location=0; 


    //Initialize Listener Object 
    Listener aListener= new Listener(); 
    Location locationObj= new Location(); 


    //images 
    private Image map; 
    private Image attribBackground; 
    private Image charMagic; 
    private Image charHybrid; 
    private Image charFighter; 
    private Image town; 
    private Image cave; 
    private Image forest; 
    private Image castle; 
    private Image characterIcon; 

    protected void initializeWindows() 
    { 
     mainwindow=new JFrame("Invictus Maneo"); 
     mainwindow.setVisible(true); 
     mainwindow.setPreferredSize(new Dimension(900, 700)); 
     mainwindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     mainwindow.setResizable(false); 

     panel1.setVisible(true); 
     panel1.setPreferredSize(new Dimension(800, 550)); 
     mainwindow.getContentPane().add(panel1, BorderLayout.NORTH); 

     panel2.setVisible(true); 
     panel2.setPreferredSize(new Dimension(800, 100)); 

     //Initializes buttons 
     startGame=new JButton("Begin Adventure"); 
     panel2.add(startGame, BorderLayout.SOUTH); 
     startGame.addActionListener(aListener); 

     quitButton=new JButton("Quit"); 
     panel2.add(quitButton, BorderLayout.SOUTH); 
     quitButton.addActionListener(aListener); 

     mapButton=new JButton("Map"); 
     mapButton.addActionListener(aListener); 

     townButton=new JButton("Town"); 
     townButton.addActionListener(aListener); 

     castleButton=new JButton("Castle"); 
     castleButton.addActionListener(aListener); 

     exitButton=new JButton("Exit Map"); 
     exitButton.addActionListener(aListener); 

     forestButton=new JButton("" +"Forest"); 
     forestButton.addActionListener(aListener); 

     fighterSelect=new JButton("Fighter"); 
     fighterSelect.addActionListener(aListener); 
     hybridSelect=new JButton("Hybrid"); 
     hybridSelect.addActionListener(aListener); 
     magicSelect=new JButton("Magic"); 
     magicSelect.addActionListener(aListener); 

     //initialize attribute panel 
     //attribpanel=new JPanel(new GridLayout(12,0)); 
     attribpanel.setVisible(false); 
     attribpanel.setPreferredSize(new Dimension(200, 500)); 
     attribpanel.setBackground(null); 


     attribpanel.add(charNameLabel); 
     attribpanel.add(charNameLabelField); 
     attribpanel.add(health); 
     attribpanel.add(healthAmount); 
     attribpanel.add(mana); 
     attribpanel.add(manaAmount); 
     attribpanel.add(strength); 
     attribpanel.add(strengthAmount); 
     attribpanel.add(agility); 
     attribpanel.add(agilityAmount); 
     attribpanel.add(intelligence); 
     attribpanel.add(intelligenceAmount); 

     mainwindow.getContentPane().add(panel2, BorderLayout.SOUTH); 

     panel3.setVisible(true); 
     panel3.setPreferredSize(new Dimension(200, 600)); 

     panel4.setVisible(true); 
     panel4.setPreferredSize(new Dimension(650, 500)); 


     panel5.setVisible(true); 
     panel5.setPreferredSize(new Dimension(600, 600)); 
     panel5.setBackground(getBackground()); 

     panel6.setVisible(false); 
     panel6.setPreferredSize(new Dimension(500, 500)); 

     panel7.setVisible(false); 
     panel7.setPreferredSize(new Dimension(100, 200)); 


     //Adds sub panels to panel 1 
     panel1.add(panel3, BorderLayout.NORTH); 
     panel1.add(panel4, BorderLayout.NORTH); 

     //panel5.setBorder(BorderFactory.createLineBorder (Color.black, 2)); 
     //panel6.setBorder(BorderFactory.createLineBorder (Color.black, 2)); 
     panel2.setBorder(BorderFactory.createLineBorder (Color.black, 2)); 
     attribpanel.setBorder(BorderFactory.createLineBorder (Color.black, 2)); 
     //panel4.setBorder(BorderFactory.createLineBorder (Color.black, 2)); 

     panel4.add(panel5, BorderLayout.NORTH); 

     loadPictures(); 

     BufferedImage myPicture; 
     try { 
      myPicture = ImageIO.read(new File("C:\\test\\GameTitle.jpg")); 
      JLabel gameTitle = new JLabel(new ImageIcon(myPicture)); 
      panel5.add(gameTitle); 
      panel5.repaint(); 
      panel1.repaint(); 

     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     BufferedImage map; 
     try { 
      map = ImageIO.read(new File("C:\\test\\map.jpg")); 
      JLabel mapLabel = new JLabel(new ImageIcon(map)); 
      panel6.add(mapLabel); 
      panel1.repaint(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     mainwindow.pack(); 


     } 

    void setAttributePanel(int s, int a, int i, int h, int m) 
    { 

     agi=a; 
     str=s; 
     intel=i; 
     currentHealth=h; 
     maxHealth=h; 
     currentMana=m; 
     maxMana=m; 

     System.out.println(agi+": agility"); 
     agilityAmount.setText(agi+""); 
     attribpanel.repaint(); 
     panel3.repaint(); 
     panel1.repaint(); 


    } 




private class Listener implements ActionListener 
{ 

    public void actionPerformed(ActionEvent a) 
    { 
     if (a.getSource()==quitButton) 
     { 
      System.exit(0); 
     } 

     else if (a.getSource()==startGame) 
     { 

      startGame.setVisible(false); 
      panel2.add(mapButton); 
      mapButton.setVisible(true); 
      panel2.repaint(); 
      panel5.setVisible(false); 
      panel3.add(attribpanel); 
      attribpanel.setVisible(true); 
      Character charChosenObj= new Character(); 
      charChosenObj.characterCreation(); 
      attribpanel.repaint(); 
      panel3.repaint(); 
     } 

     else if (a.getSource()==mapButton) 
     { 
      System.out.println("Where are you going?"); 
      panel4.add(panel6, BorderLayout.CENTER); 
      panel4.add(panel7); 
      panel7.add(townButton); 
      panel7.add(forestButton); 
      panel7.add(castleButton); 
      panel7.add(exitButton); 
      panel5.setVisible(false); 
      panel6.setVisible(true); 
      panel7.setVisible(true); 
      panel4.repaint(); 


     } 

     else if (a.getSource()==exitButton) 
     { 
      panel5.setVisible(true); 
      panel6.setVisible(false); 
      panel7.setVisible(false); 

     } 

     else if (a.getSource()==townButton) 
     { 
      System.out.println("Pick up some milk will ya?"); 
      locationObj.setLocation(1); 

     } 

     else if (a.getSource()==forestButton) 
     { 
      System.out.println("Watch for falling trees."); 
      locationObj.setLocation(2); 
      Combat combatObj=new Combat(); 
      combatObj.startCombat(); 

     } 

     else if (a.getSource()==castleButton) 
     { 
      System.out.println("Are you sure... it's kinda dark in there?"); 
      locationObj.setLocation(3); 


     } 

    } 

} 
+0

如果您執行getText,它是否會提供正確的值? – Thomas 2012-03-16 19:42:30

+1

你在哪裏調用'setAttributePanel'?那是在執行'setText'的方法,你似乎從任何地方都不會調用它? – 2012-03-16 20:13:52

+0

我與@ringbearer - 你沒有展示足夠的信息來解決這個問題。對於我們所知道的,您可以有多個GraphicalInterface,一個顯示,另一個未顯示,獲取其文本集。 – 2012-03-16 22:39:57

回答

1

mainwindow.setVisible(true);必須在GUI comstructor最後一行

+0

我確實通過將代碼行切換到最後,我絕對非常喜歡視覺方面。 – 2012-03-19 02:54:17

1

如果你有一個組件的佈局,可見事後更改首選大小(通過添加文本,例如),則必須強制新的佈局週期,例如通過「使組件無效」或「驗證」容器。

還有其他的問題,無論是

  • 爲什麼你GraphicalInterface一個JFrame當你不inend使用它作爲這樣
  • 當聽衆添加組件,你應該準備到別的地方刪除或者只能通過「調用setVisible」處理的可視性
  • 也許更好用一些佈局重新調整它的孩子可用的空間大小,喜歡的GridBagLayout
  • 正如mKorbel提到你應該「調用setVisible」只有當你的容器是完全configu紅。您將改善用戶體驗:-)