I’ve been trying to make this graphics panel repaint but every time i call to repaint, it does not update. I check the value that is supposed to be displayed in a system.out.println and the proper value is outputed in the log but the screen graphics will not update. Any suggestions/ help?
I have 3 classes(?)
This is my first class
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.Font;
import java.awt.Graphics;
import java.net.URL;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.*;
import javax.swing.Timer;
public class ChromeNPlayerScreen extends JFrame implements ActionListener{
public void actionPerformed(ActionEvent e){
repaint();
}
public static void main(String[ ] args){
DrawScreen dPnl = new DrawScreen();
ChromeNPlayerScreen mScreen = new ChromeNPlayerScreen();
Keys keyPress = new Keys();
Timer update = new Timer(1000, mScreen);
// update.start();
int screenNum=1;
dPnl.importDialogue();
mScreen.addKeyListener(keyPress);
mScreen.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
mScreen.add(dPnl);
mScreen.setSize(600,600);;
mScreen.setVisible(true);
mScreen.setResizable(false);
mScreen.setLocation(200, 200);
}
}
This is my second class
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
public class Keys extends KeyAdapter{
DrawScreen dPnl = new DrawScreen();
int scrnCount=0;
public void keyPressed(KeyEvent e){
int keyCode = e.getKeyCode();//Get key preseed
if (keyCode ==e.VK_Z) {
scrnCount++;
dPnl.setText(scrnCount);
}
}
}
And finally my third one
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.Font;
import java.awt.Graphics;
import java.net.URL;
import java.io.*;
import javax.swing.Timer;
public class DrawScreen extends JPanel {
String picPath = "pictures/", scriptPath = "dialogue/";
String out="ABC";
String[] speech = new String[39];
ClassLoader cl = DrawScreen.class.getClassLoader();
URL imgURL1 = cl.getResource(picPath+"welcomeBG.png"),imgURL2 = cl.getResource(picPath+"dialogBox.png"),
imgURL3 = cl.getResource(picPath+"Professor.png");
Toolkit tk = Toolkit.getDefaultToolkit();
Image imgBG = tk.createImage(imgURL1),
imgDialog = tk.createImage(imgURL2),
imgProfessor = tk.createImage(imgURL3);
int screenCount=1;
int scrn=1;
public void paintComponent(Graphics g) {
g.drawImage(imgBG,0,0,600,600,0,0,500,500, this);
g.drawImage(imgDialog,-5,480,595,565,0,0,500,91, this);
if (scrn==1)
g.drawImage(imgProfessor,200,50,375,475,0,0,340,748, this);
g.drawString(out, 25,515);
}
public void importDialogue(){
Keys keyPress = new Keys();
String [] fields; // array to store the "split" line read // individual field variables
BufferedReader in=null; //variable representing the bufferedreader
String line="A B 1"; //variable to read each line from the data file
File f=new File(scriptPath+"newGameScript.txt"); //variable reprsenting the data file
int count=1;
try{
in=new BufferedReader(new FileReader(f));
System.out.println("File Opening");
}
catch (FileNotFoundException e){
System.out.println("Problem finding File");
return;
}
while(line!=null){
try{
line=in.readLine();
if (line!=null){
fields=line.split(":");
speech[count]=(fields[0]);
count++;
}
}
catch (IOException e){
System.out.println("Problem reading data from file");
}
if (line!=null){}
out=speech[scrn];
}
try{
in.close();
System.out.println("Closing File");
}
catch (IOException e){
System.out.println("Problem Closing "+e);
}
}
public void setText(int num){
scrn=num;
importDialogue();
System.out.println(out);
repaint();
}
}
As you can see that when i press the Z key, it is supposed to update the out on the DrawScreen with the next line. Well supposed to but it wont. it just says the first line from the text file which is “Hi there!”.
You can find a major problem, and possibly the problem, just by using the text search capabilities of your browser on this page. I want you to use your browser to search for the String “new DrawScreen()” without the quotes of course. Ignoring my post, you’ll see that it occurs twice in your code above, once in the ChromeNPlayerScreen class:
and once in the Keys class:
Understand that each time you call this you are creating a unique and independent DrawScreen object, and that making changes to the non-displayed DrawScreen object in your Keys class will have absolutely no effect on the displayed DrawScreen object shown in the ChromeNPlayerScreen class.
A solution is to create a DrawString instance only once, probably in the ChromeNPlayerScreen class, and pass this same instance into your Key class via a constructor parameter. This way changes you make to the instance held by the Keys class will be reflected in the one and the same object that is displayed in the ChromeNPlayerScreen class.
and