れんだらー
JTableなどでおなじみのレンダラーの尻尾をつかみました。
どうもSwingはL&Fの仕組みのせいでわかりづらい。
import java.awt.*; import javax.swing.*; public class RendererTest extends JPanel { JLabel renderer = new JLabel(); RendererTest() { this.setLayout(null); renderer.setDoubleBuffered(false); } public void paintComponent(Graphics g) { this.add(renderer); for (int y=0; y<10; y++) { for (int x=0; x<10; x++) { renderer.setText("("+x+","+y+")"); renderer.setHorizontalAlignment(JLabel.CENTER); renderer.validate(); renderer.setBounds(x*100, y*20, 100, 20); Graphics cg = g.create(x*100, y*20, 100, 20); try { renderer.paint(cg); } finally { cg.dispose(); } renderer.setBounds(-100, -20, 0, 0); } } this.remove(renderer); } public static void main(String[] args) { JFrame frame = new JFrame(); RendererTest test = new RendererTest(); frame.getContentPane().add(test); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(640, 480); frame.setVisible(true); } }
註:多分、サンプルとしても完成度が低いです。
(2006-02-05追記)これだと再描画が無限に続きます。これではダメです。