Re: Choppy refresh proble
To: comp.lang.java.gui
On Jan 13, 2:54 pm, Daniel Gee <zef...@gmail.com> wrote:
Alright, here's a SSCCE that seems to still capture the problem: > http://=
paste.uni.cc/18083
Hmmm. That code was frustratingly close
to code that displays the problem (after
re-enabling the menu!).
Still - I was intrigued enough to continue
with it, and came up with this variant*.
I chose to:
- dump the JLabels for a direct 'paint()'
- lose the try/catch
- change the ActionListener for a KeyListener
- a number of other minor things I cannot recall.
* See how this works for you..
<sscce>
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class JRSCE
extends JFrame
implements KeyListener
{
static final int COLS = 80;
static final int ROWS = 22;
String[][] grid = new String[COLS][ROWS];
int columnX = 3;
int columnY = 3;
/**
* @param args none.
*/
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable() {
public void run()
{
JRSCE thisClass = new JRSCE();
thisClass.setDefaultCloseOperation(
JFrame.EXIT_ON_CLOSE);
thisClass.setVisible(true);
}
});
}
/**
* build.
*/
public JRSCE()
{
super("Use NUMPAD");
GridPanel gp = new GridPanel();
gp.addKeyListener(this);
this.setContentPane(gp);
pack();
for (int y = 0 ; y < ROWS ; y++)
{
for (int x = 0 ; x < COLS ; x++)
{
grid[x][y] = ".";
}
}
refresh();
}
public void keyReleased(KeyEvent ke) {}
public void keyTyped(KeyEvent ke) {}
public void keyPressed(KeyEvent ke) {
switch ( ke.getKeyCode() )
{
case KeyEvent.VK_NUMPAD1:
columnX--;
columnY++;
break;
case KeyEvent.VK_NUMPAD2:
columnY++;
break;
case KeyEvent.VK_NUMPAD3:
columnX++;
columnY++;
break;
case KeyEvent.VK_NUMPAD4:
columnX--;
break;
case KeyEvent.VK_NUMPAD6:
columnX++;
break;
case KeyEvent.VK_NUMPAD7:
columnX--;
columnY--;
break;
case KeyEvent.VK_NUMPAD8:
columnY--;
break;
case KeyEvent.VK_NUMPAD9:
columnX++;
columnY--;
break;
default:
System.err.println(
"Use the numpad to walk! " +
ke.getKeyCode() +
" / " +
ke.getKeyChar());
}
/**
* Bounds check to not "walk off the screen"
*/
columnX = Math.min(COLS - 1, columnX);
columnY = Math.min(ROWS - 1, columnY);
columnX = Math.max(0, columnX);
columnY = Math.max(0, columnY);
refresh();
repaint();
}
/**
* Refresh the screen after each STEP.
*/
void refresh()
{
for (int y = 0 ; y < ROWS ; y++)
{
for (int x = 0 ; x < COLS ; x++)
{
if (columnX == x && columnY == y)
{
grid[x][y]="P";
}
else
{
grid[x][y]=".";
}
}
}
}
class GridPanel extends JPanel {
static final int STEP=10;
GridPanel() {
setFocusable(true);
}
/**
* The displayed dgrid of labels.
*/
public void paintComponent(Graphics g)
{
for (int y = 0 ; y < ROWS ; y++)
{
for (int x = 0 ; x < COLS ; x++)
{
g.drawString(
grid[x][y],
(x+1)*STEP,
(y+1)*STEP );
}
}
}
public Dimension getPreferredSize() {
return new Dimension(
(COLS+1)*STEP,
(ROWS+1)*STEP);
}
}
}
</sscce>
--
Andrew T.
PhySci.org
---
* Synchronet * The Whitehouse BBS --- whitehouse.hulds.com --- check it out free usenet!
--- Synchronet 3.15a-Win32 NewsLink 1.92
Time Warp of the Future BBS - telnet://time.synchro.net:24