当前位置: 首页 > 面试题库 >

在JFrame上画一条线

房泉
2023-03-14
问题内容

我正在尝试使用Graphics2D 绘制一条线,但是该线出现在所有其他组件上,JFrame从而使它们不可见。我该如何解决这个问题?

这是代码:

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

class Success extends JFrame{

    public Success(){
        JPanel panel=new JPanel();
        getContentPane().add(panel);
        setSize(450,450);

        JButton button =new JButton("press");
        panel.add(button);
    }

    public void paint(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
        Line2D lin = new Line2D.Float(100, 100, 250, 260);
        g2.draw(lin);
    }

    public static void main(String []args){
        Success s=new Success();
        s.setVisible(true);
    }
}

问题答案:
import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;

class Success extends JFrame{

    public Success(){
        JPanel panel=new JPanel();
        getContentPane().add(panel);
        setSize(450,450);

        JButton button =new JButton("press");
        panel.add(button);
    }

    public void paint(Graphics g) {
        super.paint(g);  // fixes the immediate problem.
        Graphics2D g2 = (Graphics2D) g;
        Line2D lin = new Line2D.Float(100, 100, 250, 260);
        g2.draw(lin);
    }

    public static void main(String []args){
        Success s=new Success();
        s.setVisible(true);
    }
}

更多提示

  1. 在EDT上创建GUI。有关更多详细信息,请参见Swing中的并发。
  2. 使用JPanel@nIcEcOw建议的,paintComponent(Graphics)而不是覆盖paint()。再次,super首先调用该方法。
  3. 不扩展框架,仅使用一个实例。使用来根据组件所需的空间设置尺寸pack()


 类似资料:
  • 我有休闲代码: 我想知道是否有可能在同一帧的图像上方画一条线。我用*算法发现一条路径,并在这张图中追踪它。 坎普斯

  • 问题内容: 第一次使用BezierPaths,想知道实际上应该如何实现此功能。当前,贝塞尔曲线路径在图像的框架内移动,与在屏幕上绘制相反。 有更好的方法吗? 问题答案: 最终这样做:

  • 本文向大家介绍如何在HTML5 SVG中画一条线?,包括了如何在HTML5 SVG中画一条线?的使用技巧和注意事项,需要的朋友参考一下 SVG代表可伸缩矢量图形,是一种用于描述XML中的2D图形和图形应用程序的语言,然后由SVG查看器呈现XML。大多数网络浏览器可以显示SVG,就像显示PNG,GIF和JPG一样。 要在HTML SVG中绘制一条线,请使用SVG <line>元素。 示例 您可以尝试

  • 我画了一条基于滑块的角度线。 我试图使线的末端Y坐标为某个数字(比如300),即使它是一个角度。 有什么办法吗?以下是我目前的工作: }

  • 问题内容: 我试图从另一个类调用重绘。但这行不通。我必须画一个框架。 此打印 因此它不会执行该部分。不管用。为什么? 问题答案: 看一下这个页面,看看第一个答案。这是一个与您的问题类似的,甚至不是确切的问题。 JFrame的方法已被弃用。编译器或您的IDE应该有点抱怨,特别是如果您将标记直接放置在方法上方(使用它来测试是否可以重写此方法,也就是您想做的事情)。 这意味着不鼓励使用它,并且某些功能可

  • 问题内容: 我无法在JFrame上绘制此椭圆形。 框架显示,但其中未绘制任何内容。我在这里做错了什么? 问题答案: 您创建了一个静态方法,该方法不会覆盖paint方法。现在,其他人已经指出,您需要覆盖paintComponent等。但是,为了快速修复,您需要执行以下操作: 但是,正如其他人指出的那样,在JFrame上进行绘制非常棘手。最好使用JPanel。