我的setText没有更新我的JTextField?

时间:2012-03-16 19:34:22

标签: java swing jtextfield settext

所以我在这里遗漏了一些东西,但我无法获得我的setAttributes方法来更新敏捷文本字段,就像它应该的那样。调用方法和调用的类可以正常传递所需的值,如system.out.println(敏捷性)所示。但是在下面的行中我尝试设置agilityAmount txtfield并且它不显示。我做错了什么?

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


        }

    }

 }

2 个答案:

答案 0 :(得分:1)

mainwindow.setVisible(true);必须是GUI构造函数

中的最后一行

答案 1 :(得分:1)

如果您有一个布局且可见的组件并且之后更改了首选大小(例如,通过添加文本),则必须强制执行新的布局循环,例如通过“使组件无效”或“验证”容器。 / p>

还有其他问题,

  • 为什么你的GraphicalInterface是一个JFrame而你不打算这样使用它
  • 在侦听器中添加组件时,您应该准备将其移到其他位置,或仅通过“setVisible”处理可见性
  • 也许最好使用一些将其子项调整为可用大小的布局,如GridBagLayout
  • 正如mKorbel所提到的,只有在完全配置容器时才应该“setVisible”。您将改善用户体验: - )