我目前正在爲學校開展一個小項目,而且我還處於開始階段。我剛剛開始閱讀JFrame和所有這些內容,所以不要猶豫,爲什麼我不會很熟悉你給我看的所有內容。Java對已添加的對象進行更改
現在的目標是創建一個程序,該程序可以發出圖像並能夠手動更改該圖像的每個像素。因此,我寫了下面的代碼:
public class JavaGraphicsTest {
private static Pixel pixel;
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setVisible(true);
pixel = new Pixel(1600, 900);
frame.getContentPane().add(pixel);
//pixel.testChange();
}
}
和:
public class Pixel extends Component {
private BufferedImage img;
private int width;
private int height;
private Graphics graphics;
public Pixel(int w, int h) {
width = w;
height = h;
}
public void create() {
img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
//Set any color for now
for(int wc = 0; wc < width; wc++) {
for(int hc = 0; hc < height; hc++) {
img.setRGB(wc, hc, new Color(0xAAFFBB).getRGB());
}
}
}
@Override
public void paint(Graphics g) {
super.paint(g);
graphics = g;
create();
update();
}
public void update() {
graphics.drawImage(img, 0, 0, null);
}
public void testChange() {
for(int i = 50; i < 80; i++) {
for(int j = 80; j < 120; j++) {
img.setRGB(i, j, new Color(0xFF8876).getRGB());
}
for(int j = 460; j < 493; j++) {
img.setRGB(i, j, new Color(0xFF8876).getRGB());
}
}
}
}
嗯,代碼工作至今(多小時討厭的錯誤察覺的xD之後),但我想要做的現在似乎還沒有工作到目前爲止:我想在main方法中調用方法「pixel.testChange()」(它現在已被註釋)。但據我瞭解JFrame是如何工作的,一旦我將它添加到JFrame中,我就無法做任何事情。但是,誰應該工作呢?我如何修改任何活動對象而不刪除並重新添加? PS:如果你不明白testChange方法應該做什麼:它應該將圖像的兩個塊更改爲另一種顏色,它基本上是一個測試,看看我是否成功地更改了圖像。
如果您需要對項目的更多信息,請向我:)
由於提前, 朱利安
嗨朱利安,歡迎來到stackoverflow! :D我會建議看看revalidate()方法。我自己對他們不太瞭解,但據我所知,它應該做你想做的事情。 :) –
@EthanMoore謝謝^^,這似乎是做這件事的基礎,但是通過更多的錯誤發現,我發現我目前正在戰鬥的問題是另一個:當我打電話給這行時:'img.setRGB (80,80,new Color(0xFF8876).getRGB());'在paint()方法中,它可以工作,但在testChange()方法中我總是得到一個NullPointer :(但我完全不知道爲什麼它是這樣的... –
嘗試更改'新的顏色(0xFF8876).getRGB()'到一個現有的值(只需再放80?)並告訴我會發生什麼?@JulianThurner –