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

如何用Java画线

莘俊能
2023-03-14
问题内容

我想知道Java中是否有一个函数可以从坐标(x1,x2)到(y1,y2)画一条线?

我想要做的是这样的事情:

drawLine(x1, x2, x3, x4);

而且我希望能够在代码中的任何时候执行此操作,从而使多行同时出现。

我试图做到这一点:

public void paint(Graphics g){
   g.drawLine(0, 0, 100, 100);
}

但是,这使我无法控制何时使用该函数,并且我无法弄清楚如何多次调用它。

希望你明白我的意思!

PS我想创建一个具有许多坐标的坐标系。


问题答案:

绘制线条的摆动组件的一个非常简单的示例。它在内部保留一个列表,其中包含使用方法addLine添加的行。每次添加新行时,都会调用重新绘制以告知图形子系统需要新绘制。

该类还包括一些用法示例。

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.LinkedList;

import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class LinesComponent extends JComponent{

private static class Line{
    final int x1; 
    final int y1;
    final int x2;
    final int y2;   
    final Color color;

    public Line(int x1, int y1, int x2, int y2, Color color) {
        this.x1 = x1;
        this.y1 = y1;
        this.x2 = x2;
        this.y2 = y2;
        this.color = color;
    }               
}

private final LinkedList<Line> lines = new LinkedList<Line>();

public void addLine(int x1, int x2, int x3, int x4) {
    addLine(x1, x2, x3, x4, Color.black);
}

public void addLine(int x1, int x2, int x3, int x4, Color color) {
    lines.add(new Line(x1,x2,x3,x4, color));        
    repaint();
}

public void clearLines() {
    lines.clear();
    repaint();
}

@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    for (Line line : lines) {
        g.setColor(line.color);
        g.drawLine(line.x1, line.y1, line.x2, line.y2);
    }
}

public static void main(String[] args) {
    JFrame testFrame = new JFrame();
    testFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    final LinesComponent comp = new LinesComponent();
    comp.setPreferredSize(new Dimension(320, 200));
    testFrame.getContentPane().add(comp, BorderLayout.CENTER);
    JPanel buttonsPanel = new JPanel();
    JButton newLineButton = new JButton("New Line");
    JButton clearButton = new JButton("Clear");
    buttonsPanel.add(newLineButton);
    buttonsPanel.add(clearButton);
    testFrame.getContentPane().add(buttonsPanel, BorderLayout.SOUTH);
    newLineButton.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            int x1 = (int) (Math.random()*320);
            int x2 = (int) (Math.random()*320);
            int y1 = (int) (Math.random()*200);
            int y2 = (int) (Math.random()*200);
            Color randomColor = new Color((float)Math.random(), (float)Math.random(), (float)Math.random());
            comp.addLine(x1, y1, x2, y2, randomColor);
        }
    });
    clearButton.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            comp.clearLines();
        }
    });
    testFrame.pack();
    testFrame.setVisible(true);
}

}


 类似资料:
  • A ) 切换列表 显示正在参加派对的朋友列表。 显示被邀请参加的派对列表。 显示曾参加的派对历史记录和喜爱的派对 最多只能显示10个我的最爱,曾参加的派对和我的最爱最多共可显示20个。 B ) (举办派对) 举办新派对。 您可举办多个派对,但只能参加1个。 C ) (返回派对) 轻触图标可返回派对画面。只在参加派对时显示。 D ) 派对的信息 轻触即可显示派对画面,您可由此参加语音/文字聊天。 主

  • 介绍如何使用主要的画面。 主画面 A ) 信息列 显示PS Vita的状态。 B ) 应用程序 显示应用程序的图标。最多可显示100个图标。 C ) 页数指示灯 显示主画面的页数。现在显示的地方会亮白光。 LiveArea™ LiveArea™是应用程序的首页画面,显示的画面因应用程序而异。 A ) 动作图标 轻触图标可启动支持应用程序的功能。显示的图标因应用程序而异。 升级 执行升级 仅限有升级

  • 问题内容: 我找不到用Python库画一条任意线的方法。它允许绘制水平线和垂直线(与和,例如),但我没有看到如何通过两个给定的点划一条线和。有办法吗?有没有简单的方法? 问题答案: 从matplotlib 3.3开始,您可以使用进行操作。

  • 问题内容: 我有一个JPanel,我为此设置了一些图像作为背景。我需要在图像上方绘制一堆圆圈。现在,圆将基于某个坐标x,y进行定位,其大小将基于某个整数大小。这就是我上课的时间。 如何创建可以执行此操作的方法? 问题答案: 您的方法可能与此类似,其中您也使用一个类来容纳所有圆和绘制例程:

  • 我已经尝试了很多,但我能得到的只是第一个图像,而不是动画GIF。 目前最好的解决方案是加载一个动画gif到图标,但我需要文件。代码如下: 这里有人能帮忙吗? 这段代码只获得gif的第一个图像(不是动画):

  • 问题内容: 尝试使用awt canvas上的鼠标来绘制图形(目前为线)。Iam首次尝试Java图形。所以不确定如何去做。这是我的第一次尝试: 问题:1)将窗口最小化并还原后,绘制的线条消失了(由于要重新绘制)2)我要的是该线条应跟随鼠标移动(拖动时)。最后一行应该从按下位置到释放鼠标的位置。现在请礼节,当鼠标移动时,将绘制新的线条。我不确定如何清除画布上的中间线。 有人可以帮我解决这些问题吗? 问