我即將編程一個小版本的「龐」。但我的JPanels
已經有問題了。 Shields
的大小從100變爲非常奇怪的10。並且沒有方法改變它的大小! 盾牌也跳到JPanel
的中間位置。他們不期望這樣做。在這篇文章的兩個截圖中可以看到。 (Puu.sh)JPanel位置和大小變化怪異
對不起,如果我只是錯過了明顯的東西,但正如我所說,我正在接受培訓。
主要有PSVM()
public class Main {
public static void main(String[] args) {
new Field();
}
}
場(幀與它的遊戲)
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
public class Field extends JFrame {
private Room room = new Room();
public Field() {
this.setSize((int) (Toolkit.getDefaultToolkit().getScreenSize().getWidth()/1.5), (int) (Toolkit.getDefaultToolkit().getScreenSize().getHeight()/1.5));
this.setLayout(null);
this.setLocation((int) ((Toolkit.getDefaultToolkit().getScreenSize().getWidth() - (Toolkit.getDefaultToolkit().getScreenSize().getWidth()/1.5))/2), (int) ((Toolkit.getDefaultToolkit().getScreenSize().getHeight() - (Toolkit.getDefaultToolkit().getScreenSize().getHeight()/1.5))/2));
this.getContentPane().setBackground(Color.GRAY);
this.setResizable(true);
this.setEnabled(true);
this.setMinimumSize(new Dimension(1000, 455));
if (getHeight() < 455) {
this.setSize(getWidth(), 455);
} else if (getWidth() < 1000) {
this.setSize(1000, getHeight());
}
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.add(room);
this.setVisible(true);
addMouseListener(this);
this.addComponentListener(new ComponentAdapter() {
public void componentResized(ComponentEvent evt) {
room.updateLocation(getSize());
}
});
}
}
房
import javax.swing.*;
import java.awt.*;
public class Room extends JPanel {
private Shield shieldL = new Shield(0); // LEFT side
private Shield shieldR = new Shield(1); // RIGHT side
public Room() {
this.setBackground(new Color(122, 197, 205));
this.add(shieldL);
this.add(shieldR);
}
public void updateLocation(Dimension d) {
this.setSize((int) d.getWidth(), (int) (d.getHeight() - (d.getHeight()/5)));
this.setLocation(0, (int) (d.getHeight()/10));
shieldL.updateLocation(getSize());
shieldR.updateLocation(getSize());
this.setVisible(true);
}
}
盾
import javax.swing.*;
import java.awt.*;
public class Shield extends JPanel {
private int side = 0;
public Shield(int s) { //0 = Left | 1 = Right
side = s;
this.setSize(10, 100);
this.setBackground(Color.white);
}
public void updateLocation(Dimension d) { //Bug found here
System.out.println(getSize()); //Bug seems not to be created here?
int xPos;
if (side == 0) {
xPos = (int) (d.getWidth()/8);
} else {
xPos = (int) (d.getWidth()/8 * 7 - this.getWidth()/2);
}
this.setLocation(xPos, (int) (d.getHeight()/2 - (getHeight()/2)));
this.setVisible(true);
}
}
他們最終像這樣:,在randome framesize changings切換位置。
http://puu.sh/ceyE0/ef15ee1748.png
http://puu.sh/ceyFN/122174db48.png
謝謝! 朱利安:)
當您發佈的代碼不能爲我們編譯時,我們如何才能找到問題?請發佈[MCVE](http://stackoverflow.com/help/mcve)(並確保它是*最小和可編譯的*)。 – user1803551 2014-10-16 15:38:41
整個代碼:https://gist.github.com/anonymous/1ee36b3ef2da779e2f76 – 2014-10-16 15:41:50
你忽略了我的評論,請再次閱讀,請包括鏈接,如果不清楚,然後問。針對SO的問題預計會有一些標準。 – user1803551 2014-10-16 15:45:09