所以我在这里遗漏了一些东西,但我无法获得我的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);
}
}
}
答案 0 :(得分:1)
mainwindow.setVisible(true);
必须是GUI构造函数
答案 1 :(得分:1)
如果您有一个布局且可见的组件并且之后更改了首选大小(例如,通过添加文本),则必须强制执行新的布局循环,例如通过“使组件无效”或“验证”容器。 / p>
还有其他问题,