为什么面板不喷漆?

发布于 2024-12-11 01:53:31 字数 406 浏览 0 评论 0原文

代码

import javax.swing.*;
import java.awt.*;

class tester {
   public static void main(String args[]) {
     JFrame fr = new JFrame();
     JPanel p = new JPanel();
     p.setBackground(Color.RED);
     p.paintImmediately(20,20,500,500);  
     fr.add(p);
     fr.setVisible(true);
     fr.setSize(2000,2000);
  }
}

我得到一个完全红色的面板。为什么我接不到电话?我怎样才能得到它?

CODE

import javax.swing.*;
import java.awt.*;

class tester {
   public static void main(String args[]) {
     JFrame fr = new JFrame();
     JPanel p = new JPanel();
     p.setBackground(Color.RED);
     p.paintImmediately(20,20,500,500);  
     fr.add(p);
     fr.setVisible(true);
     fr.setSize(2000,2000);
  }
}

I get a panel painted completely red. Why don't I get the line? How can I get it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

像极了他 2024-12-18 01:53:31

我得到了一个完全涂成红色的面板。

那是因为您设置了背景并且没有进行任何进一步的绘制...

为什么我接不到电话?我怎样才能得到它?

这不是这样做的方法。为什么要调用paintImmediately?以下是文档的内容:

绘制该组件中的指定区域及其所有区域
立即与该区域重叠的后代。

很少需要调用此方法。大多数情况下它更多
有效地调用 repaint,这会推迟实际的绘制并且可以
将冗余请求合并到单个绘制调用中。这个方法是
如果需要在当前事件发生时更新显示,则很有用
正在派遣中。

我建议您阅读有关 AWT/Swing 中绘画的内容。


要获得类似这样的内容

在此处输入图像描述

您可以像这样更改代码:

JFrame fr = new JFrame();
JPanel p = new JPanel() {
    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawLine(20, 20, 500, 500);
    }
};
p.setBackground(Color.RED);
fr.add(p);
fr.setVisible(true);
fr.setSize(200, 200);

I get a panel painted completely of red color.

That's because you set the background and didn't do any further painting...

Why dont i get the line ? How can i get it?

This is not the way to do it. Why do you call paintImmediately? Here is what the documentation says:

Paints the specified region in this component and all of its
descendants that overlap the region, immediately.

It's rarely necessary to call this method. In most cases it's more
efficient to call repaint, which defers the actual painting and can
collapse redundant requests into a single paint call. This method is
useful if one needs to update the display while the current event is
being dispatched.

I suggest you read up on painting in AWT/Swing.


To get something like this

enter image description here

you could change your code like this:

JFrame fr = new JFrame();
JPanel p = new JPanel() {
    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawLine(20, 20, 500, 500);
    }
};
p.setBackground(Color.RED);
fr.add(p);
fr.setVisible(true);
fr.setSize(200, 200);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文