gpt4 book ai didi

java - 继续打印白色窗口

转载 作者:行者123 更新时间:2023-11-29 04:23:56 24 4
gpt4 key购买 nike

我为这个非常简单的程序编写了这些方法(我试图弄清楚 JFrame 是如何工作的):

import java.util.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;

import javax.imageio.*;
import javax.swing.*;

public class Display extends JFrame {
private int larg = 512;
private int lung = 512;

public Display() {
setSize(larg, lung);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}

public void draw(Graphics gr) {
Color color = new Color(100, 200, 0);
gr.setColor(color);
gr.fillRect(0, 0, larg, lung);
}

public static void main(String[] args) {
new Display();
}
}

但是他们一直在打印一个白色窗口而不是 (100, 200, 0) 窗口,这是为什么呢?

最佳答案

好的,您正在创建自己的绘画方法 draw,并假设它会以某种方式神奇地被调用。这不会发生,也不是 Swing 图形的工作方式。谷歌并浏览教程,但如果你这样做,你会发现你需要覆盖一个真正的绘画方法,一个存在于父组件中的方法(例如 paint 用于 JFrame,paintComponent 用于 JPanel),并且你必须确保您正确覆盖该方法,通常使用@Override注释或它不会工作。

教程还将告诉您不要直接在 JFrame 中绘制,而是在 JPanel 的 paintComponent 覆盖中绘制。

这个故事的寓意:避免猜测编码是如何工作的,而是转到主要资源,这里是教程,看看如何正确地完成它。

例如:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.*;

@SuppressWarnings("serial")
public class MyDraw extends JPanel {

private static final Color RECT_COLOR = new Color(100, 200, 0);
private int larg;
private int lung;

public MyDraw(int larg, int lung) {
this.larg = larg;
this.lung = lung;
}

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(RECT_COLOR);
g.fillRect(0, 0, larg, lung);
}

@Override
public Dimension getPreferredSize() {
if (isPreferredSizeSet()) {
return super.getPreferredSize();
}
return new Dimension(larg, lung);
}

private static void createAndShowGui() {
JFrame frame = new JFrame("MyDraw");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
int larg = 512;
int lung = 512;
frame.getContentPane().add(new MyDraw(larg, lung));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(() -> createAndShowGui());
}
}

Swing 绘画教程:Lesson: Performing Custom Painting

关于java - 继续打印白色窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47424664/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com