以下の例では、JPanelですべてのJFrameを使用する方法を教えてください。私は好ましいサイズを800x420に設定しましたが、実際には792x391しか塗りません。JFrame内のJPanelをウィンドウ全体に埋め込む方法は?
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.image.BufferStrategy;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class BSTest extends JFrame {
BufferStrategy bs;
DrawPanel panel = new DrawPanel();
public BSTest() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout()); // edited line
setVisible(true);
setSize(800,420);
setLocationRelativeTo(null);
setIgnoreRepaint(true);
createBufferStrategy(2);
bs = getBufferStrategy();
panel.setIgnoreRepaint(true);
panel.setPreferredSize(new Dimension(800,420));
add(panel, BorderLayout.CENTER); // edited line
panel.drawStuff();
}
public class DrawPanel extends JPanel {
public void drawStuff() {
while(true) {
try {
Graphics2D g = (Graphics2D)bs.getDrawGraphics();
g.setColor(Color.BLACK);
System.out.println("W:"+getSize().width+", H:"+getSize().height);
g.fillRect(0,0,getSize().width,getSize().height);
bs.show();
g.dispose();
Thread.sleep(20);
} catch (Exception e) { System.exit(0); }
}
}
}
public static void main(String[] args) {
BSTest bst = new BSTest();
}
}
スイングエンジンには独自のペイントループがありますが、while(真)は必要ありません。あなたのパネルクラスの 'JComponent.paint(Graphics g)'をオーバーライドするだけです。 –
こんにちは@Joe、 'paint()'を使わない 'BufferStrategy'をここで使用しようとしています。 'setIgnoreRepaint(true);'が何のためのものであるかを示します。万一私が窓全体をどのように満たすことができるかについての考え? –
はい、JPanelを 'JFrame.setContentPane()'に渡してみてください。 –