标签: java-canvas

如何使用Swing制作画布?

我正在尝试使用Java制作一个绘图编辑器,其中我有一个工具栏,其中包含我想要在画布中粘贴的对象.我正在使用Swing组件来制作GUI,但是当我寻找制作画布的方法时,我只从AWT中找到了类画布.

有没有办法用Swing制作类似于画布的东西?(例如,JPanel?)我已经读过,使用AWT的类画布和使用swing制作的GUI将无法正常工作,这是真的吗?

java user-interface swing java-canvas

24
推荐指数
3
解决办法
6万
查看次数

JavaFX:如何清除画布

假设我在画布上淹没了一个矩形,我想要清理它以绘制其他图形/ poligon/arc ....

我该怎么做?我尝试过很多方面,但没有一个有效.我认为这可行,但我不确定,你能不能告诉我它是否正确?

GraphicsContext gc = myCanvas.getGraphicsContext2D();
gc.setFill(Color.ALICEBLUE);
gc.fillRect(0, 0, 300, 200);
Run Code Online (Sandbox Code Playgroud)

javafx java-canvas

9
推荐指数
1
解决办法
2万
查看次数

使用java将Ms word表的单元格转换为图像

我需要将ms word table的每个单元格转换为图像.我写的代码getImage,以及getText,但我想合并他们两人并转换成单一的形象,所以我只想细胞转换成图像.

参考

XWPFDocument doc = new XWPFDocument(new FileInputStream(fileName));
        List<XWPFTable> table = doc.getTables();
        for (XWPFTable xwpfTable : table) {
            List<XWPFTableRow> row = xwpfTable.getRows();
            for (XWPFTableRow xwpfTableRow : row) {
                List<XWPFTableCell> cell = xwpfTableRow.getTableCells();
                for (XWPFTableCell xwpfTableCell : cell) {
                    if (xwpfTableCell != null) {
                        System.out.println(xwpfTableCell.getText());
                        String s = xwpfTableCell.getText();
                        for (XWPFParagraph p : xwpfTableCell.getParagraphs()) {
                            for (XWPFRun run : p.getRuns()) {
                                for (XWPFPicture pic : run.getEmbeddedPictures()) {
                                    byte[] pictureData = pic.getPictureData().getData();
                                    System.out.println("picture : " + …
Run Code Online (Sandbox Code Playgroud)

java image apache-poi java-canvas

8
推荐指数
1
解决办法
585
查看次数

战舰游戏 - 船重叠

我正在使用ACM库在Java中编写一个简单的战舰游戏.游戏开始后,应该将船只放在画布上的随机位置,但问题是船只可能会互相覆盖,这在游戏中是不允许的.如何避免将船放在彼此之上?

我的代码是:

private void putSmallShips() {
    for (int i = 0; i < SMALL_SHIP_QUANTITY; i++){
        smallShip = new GRect(SMALL_SHIP_WIDTH, SHIP_HEIGHT);
        int x = rgen.nextInt(10, 510);
        int y = rgen.nextInt(10, 510);
        while (true){
            gobj = getElementAt(x, y);
            if (gobj == null) break;
            x = rgen.nextInt(10, 510);
            y = rgen.nextInt(10, 510);
        }
        smallShip.setLocation(x, y);
        add(smallShip);
    }
}

private void putMiddleShips() {
    for (int i = 0; i < MIDDLE_SHIP_QUANTITY; i++){
        middleShip = new GRect(MIDDLE_SHIP_WIDTH, SHIP_HEIGHT);
        int x = rgen.nextInt(10, 530);
        int y …
Run Code Online (Sandbox Code Playgroud)

java java-canvas acm-java-libraries

7
推荐指数
1
解决办法
1693
查看次数

线交叉矩形 - 如何找到交叉点?

我在画布上画一个矩形,从矩形的中心到坐标空间中的一个随机点画一条线.

现在,我想按行矩形内的长度截断行,以便行从矩形边开始.

我怎么能这样做?

  • 矩形可以通过2点来定义:Pstart(1, 3),Pend(3, 1)
  • 中心点可以计算为: P(2, 2)
  • 现在画线来P(2, 2)Q(10, 2).

据我所知,矩形的宽度是2,我可以告诉行开始P(4, 2)而不是P(2, 2).

当该点与XY轴之一不平行时,这会变得更复杂.此外,矩形内部的长度对于对角线而言将是不同的量.

如何计算线点相对于矩形中心和线的终点的起始偏移?

可能我必须找到线穿过矩形的点,然后让线从交叉点开始.但我怎么能得到这一点呢?

java math gwt vector java-canvas

6
推荐指数
1
解决办法
7620
查看次数

画布形状模型的继承与组合?

对于以下模型,您更喜欢继承还是组合:

  • 我想在 a 上绘制对象canvas,每个对象代表一个数据对象
  • 把它想象成一个状态机图:在它们之间Ellipses表示States,Lines表示。connections/transitions对象表示本身永远不会改变,即 aState将始终由 a 显示ellipse。但绘制的方式ellipse应该有所不同,例如,对于选择,它应该具有不同的颜色,而拖动它可能应该有一个 Alpha 通道,等等。

从设计的角度来看, anellipse不是 a state, aline也不是 a transition。无论如何,将两个对象组合起来是合适的,以便能够将它们收集在一个对象中List<Shape>shape.draw()在每个对象上执行。

现在可以有 2 个设计模型,而我认为 2 个类始终是相同的:

interface Shape {
    void draw();
}
abstract class Figure implements Shape {
    //basic vars like start and end coordinates
    int x0, y0, x1, y1;
}
Run Code Online (Sandbox Code Playgroud)

遗产:

abstract class State extends Figure { …
Run Code Online (Sandbox Code Playgroud)

java oop java-canvas

5
推荐指数
1
解决办法
514
查看次数

在扩展Canvas时使用drawLine()绘制粗线

鉴于以下内容:

public class NavigationCanvas extends Canvas implements MouseListener,MouseMotionListener,KeyListener  {

    public void paint(Graphics g)
    {

        // some code 
        // more 
        // ...

        g.setColor(Color.black);

        //  drawing each Line
        for (int i=0; i<length; i++) 
        {
            Line2D currLine  = m_lines.get(i);

            g.drawLine((int)currLine.getX1(),(int)currLine.getY1(),
                (int)currLine.getX2(),(int)currLine.getY2());   
            g.drawLine((int)currLine.getX1()+1,(int)currLine.getY1()+1
                ,(int)currLine.getX2()+1,(int)currLine.getY2()+1);
            g.drawLine((int)currLine.getX1()+2,(int)currLine.getY1()+2
                ,(int)currLine.getX2()+2,(int)currLine.getY2()+2);
        }


    }       
    ...
}
Run Code Online (Sandbox Code Playgroud)

当我绘制线条时,currLine我得到这个:

在此输入图像描述

正如你所看到的,我打了3个电话drawline(),让它更大胆,但它仍然不如我想要的那样.

我怎样画一条粗线?

java awt java-2d java-canvas

5
推荐指数
1
解决办法
2万
查看次数

如何在swing jframe中嵌入SWT浏览器

我想将我的SWT浏览器嵌入swing jframe中.我尝试示例,但它需要调整窗口大小以加载浏览器窗口.如何重新调整画布,我该怎么做?

java browser swing swt java-canvas

5
推荐指数
1
解决办法
4635
查看次数

画布旋转后图像模糊,仅适用于 Android 6

我有一个带有以下代码的自定义视图:

private final Drawable outerGauge;
private final Drawable innerGauge;
private float rotateX;
private float rotateY;
private int rotation = 0;

{
    outerGauge = getContext().getDrawable(R.drawable.gauge_outer);
    innerGauge = getContext().getDrawable(R.drawable.gauge_inner);
}

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    outerGauge.draw(canvas);
    canvas.rotate(rotation, rotateX, rotateY);
    innerGauge.draw(canvas);
    canvas.rotate(-rotation, rotateX, rotateY);
}
Run Code Online (Sandbox Code Playgroud)

大多数情况下,这会产生非常清晰的图像。但是,有时结果如下所示: 不是很清楚 这似乎只发生在我的两个测试设备之一上。该设备是摩托罗拉 moto G,具有 Android 6 升级。另一个似乎总是能产生非常清晰的图像的测试设备是一加 X,Android 5。它也不一致,有时会发生,然后下一刻不再发生。从我已经能够测试的情况来看,它甚至不依赖于应用的旋转量。不过,我从未见过它发生在直角(0、90、180 度)上,而且在接近 45 或 135 度的角度上情况似乎更糟。

有问题的图像是导入的 SVG,直接放置在 res/drawable 文件夹中。因此它不可能是分辨率。(此外,gauge_outer 被放置在完全相同的文件夹中并以完全相同的方式制作,尽管这个不会变得模糊。)

关于如何解决这个问题的任何想法?


编辑:

好吧,别介意我说的完全不一致。它似乎完全一致,并且在旋转越来越接近 90 度时最糟糕。此外,只要旋转正好 90 度,指示器就会完全消失。


编辑:

看:两个模拟器,一个运行 Android 5,一个运行 Android 6:

安卓 5安卓 6

完整的源代码如下:

package nl.dvandenberg.gauge;

import …
Run Code Online (Sandbox Code Playgroud)

android java-canvas android-6.0-marshmallow

5
推荐指数
1
解决办法
1029
查看次数

你为什么要用JNI在AWT的画布上画画?

我对JNI很陌生,在调查JNI时我偶然发现了这个:

本机代码不仅可以与Java接口,还可以在Java Canvas上绘制,这可以通过Java AWT Native Interface实现

具体/可用的功能是否有特定原因?它是否会改善Windows系统的处理时间?请详细说明为何以及何时使用此类功能

java java-native-interface java-canvas

4
推荐指数
1
解决办法
443
查看次数