- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
此代码来自 Lewis Loftus 编写的 Java 教科书。它显示了教科书中的示例输出,背景为浅蓝色(青色)。我认为有问题:
setBackground(Color.cyan);
这是整个程序:
import javax.swing.JApplet;
import java.awt.*;
public class Snowman extends JApplet
{
//-----------------------------------------------------------------
// Draws a snowman.
//-----------------------------------------------------------------
public void paint(Graphics page)
{
final int MID = 150;
final int TOP = 50;
setBackground(Color.cyan);
page.setColor(Color.blue);
page.fillRect(0, 175, 300, 50); // ground
page.setColor(Color.yellow);
page.fillOval(-40, -40, 80, 80); // sun
page.setColor(Color.white);
page.fillOval(MID-20, TOP, 40, 40); // head
page.fillOval(MID-35, TOP+35, 70, 50); // upper torso
page.fillOval(MID-50, TOP+80, 100, 60); // lower torso
page.setColor(Color.black);
page.fillOval(MID-10, TOP+10, 5, 5); // left eye
page.fillOval(MID+5, TOP+10, 5, 5); // right eye
page.drawArc(MID-10, TOP+20, 20, 10, 190, 160); // smile
page.drawLine(MID-25, TOP+60, MID-50, TOP+40); // left arm
page.drawLine(MID+25, TOP+60, MID+55, TOP+60); // right arm
page.drawLine(MID-20, TOP+5, MID+20, TOP+5); // brim of hat
page.fillRect(MID-15, TOP-20, 30, 25); // top of hat
}
}
最佳答案
切勿尝试在顶级组件中绘制。相反,创建一个扩展 JPanel 的类,重写其 paintComponent
方法,确保在重写中调用 super 的 paintComponent
,然后将 JPanel 添加到 JApplet 的 contentPane 中。另外,请在 JPanel 的构造函数中设置 JPanel 的背景,而不是在其 Paint 或 PaintComponent 方法中。
此外,在以后的问题中,请尝试将代码缩进合理且一致的量。良好的代码格式使代码更易于阅读,更重要的是,更易于理解。
例如,
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.*;
@SuppressWarnings("serial")
public class SnowManPanel extends JPanel {
private static final Color BACKGROUND = Color.CYAN;
private static final int MID = 150;
private static final int TOP = 50;
private static final int PREF_W = 300;
private static final int PREF_H = 225;
public SnowManPanel() {
setBackground(BACKGROUND);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.blue);
g.fillRect(0, 175, PREF_W, PREF_H - 175); // ground
g.setColor(Color.yellow);
g.fillOval(-40, -40, 80, 80); // sun
g.setColor(Color.white);
g.fillOval(MID-20, TOP, 40, 40); // head
g.fillOval(MID-35, TOP+35, 70, 50); // upper torso
g.fillOval(MID-50, TOP+80, 100, 60); // lower torso
g.setColor(Color.black);
g.fillOval(MID-10, TOP+10, 5, 5); // left eye
g.fillOval(MID+5, TOP+10, 5, 5); // right eye
g.drawArc(MID-10, TOP+20, 20, 10, 190, 160); // smile
g.drawLine(MID-25, TOP+60, MID-50, TOP+40); // left arm
g.drawLine(MID+25, TOP+60, MID+55, TOP+60); // right arm
g.drawLine(MID-20, TOP+5, MID+20, TOP+5); // brim of hat
g.fillRect(MID-15, TOP-20, 30, 25); // top of hat
}
@Override
public Dimension getPreferredSize() {
if (isPreferredSizeSet()) {
return super.getPreferredSize();
}
return new Dimension(PREF_W, PREF_H);
}
private static void createAndShowGui() {
SnowManPanel mainPanel = new SnowManPanel();
JFrame frame = new JFrame("SnowManPanel");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
请注意,顶级窗口(例如 JApplet 和 JFrame)有点复杂,并且具有多个角色和多个层。一个问题是您的程序尝试直接在 JApplet 的 Paint 方法中进行绘制,而忽略了小程序的背景是由另一层(即其 contentPane)绘制的,这是一个包含小程序所有内容的 JPanel。如果不调用 super.paint(...) 方法,它还有可能破坏小程序的绘画链——因为小程序自己的绘画(通过 super.paint(...) 调用)最终会被破坏。负责绘制所有小程序,包括其边框及其子组件。
关于Java - 为什么这个小程序的背景没有显示为浅蓝色(青色)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29337202/
尝试在带有 Bootstrap 样式的链接周围添加边框(似乎是浅蓝色)。在 css 文件中找不到颜色。边框位于链接周围的另一个 div 中。我想在边框和链接之间使用相同的颜色。 最佳答案 我想你正在寻
我正在拼命尝试使用 python 通过 OBEX 发送文件。我有两个功能代码,第一个使用 lightblue,另一个使用 obexftp。我们这里有两部 Android 手机,第一部是三星 Galax
我是一名优秀的程序员,十分优秀!