ImはRiver-Raidのようなゲームを書いており、すべての画像はg.drawImage(...)で描かれています。 私の質問は:どのようにコンテンツのアスペクト比を維持し、誰かがJFrameのサイズを変更するときに新しいウィンドウのサイズに合わせてコンテンツを拡大するには?JLabelを使わずに画像をサイズ変更
このようなオプションはありますか? JLabelとLayoutsを使用せずにこれを行うことはできますか?そうでない場合、これを他の方法で行う方法は?
またJPanelの
private void doDrawing(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
drawStrings(g2);
mapa.drawMap(g2);
ArrayList ms = craft.getMissiles();
for (Object m1 : ms) {
Missile m = (Missile) m1;
g2.drawImage(m.getImage(), m.getX(), m.getY(), this);
}
g2.drawImage(craft.getImage(), craft.getX(), craft.getY(), this);
for (EnemyJet enemy : enemies) {
g2.drawImage(enemy.getImage(), enemy.getX(), enemy.getY(), this);
}
for (Fuel fuel : fuels) {
g2.drawImage(fuel.getImage(), fuel.getX(), fuel.getY(), fuel.getHeight(), fuel.getHeight(), this);
}
for (Obstacle o : obst) {
g2.drawImage(o.getImage(), o.getX(), o.getY(), this);
}
drawStrings(g2);
}
で物事を描画するために私のコードJPanelのコンストラクタ:
private void initBoard() {
addKeyListener(new TAdapter());
setFocusable(true);
setBackground(Color.WHITE);
setLayout(new GridBagLayout());
craft = new Craft(ICRAFT_X, ICRAFT_Y);
mapa = new Mapa();
setMinimumSize(new Dimension(WIDTH, HEIGHT));
initEnemiesAndAddThem();
czas = new Timer(delay, this);
czas.start();
}
のJFrameのコンストラクタ:
private void initGame()
{
add(new Plansza());
setTitle("Reeevah Raaid");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(WIDTH, HEIGHT);
setPreferredSize(new Dimension(WIDTH, HEIGHT));
setLocationRelativeTo(null);
pack();
setVisible(true);
//setExtendedState(JFrame.MAXIMIZED_BOTH);
//setResizable(false);
}
申し訳ありませんが、背景は目に見えるだけなのでスケールが非常に大きくても小さすぎても問題ありませんが、交差点が発生してどこかに見えることがわかります(画像)。私はこのアプローチが好きですが、それは描画のすべての画像で機能するためですが、最終的に何かがスケールに間違っています – tdbr
編集:いくつかの研究の後、intersetcionが発生しますが、画像は表示されません...私は0.5倍または2倍画像が小さすぎたり大きすぎたりすると、私はそれらを見ることはできませんが、目に見えません。 – tdbr