我正在尝试使用Java制作一个绘图编辑器,其中我有一个工具栏,其中包含我想要在画布中粘贴的对象.我正在使用Swing组件来制作GUI,但是当我寻找制作画布的方法时,我只从AWT中找到了类画布.
有没有办法用Swing制作类似于画布的东西?(例如,JPanel?)我已经读过,使用AWT的类画布和使用swing制作的GUI将无法正常工作,这是真的吗?
假设我在画布上淹没了一个矩形,我想要清理它以绘制其他图形/ poligon/arc ....
我该怎么做?我尝试过很多方面,但没有一个有效.我认为这可行,但我不确定,你能不能告诉我它是否正确?
GraphicsContext gc = myCanvas.getGraphicsContext2D();
gc.setFill(Color.ALICEBLUE);
gc.fillRect(0, 0, 300, 200);
Run Code Online (Sandbox Code Playgroud) 我需要将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) 我正在使用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) 我在画布上画一个矩形,从矩形的中心到坐标空间中的一个随机点画一条线.
现在,我想按行矩形内的长度截断行,以便行从矩形边开始.
我怎么能这样做?
例
Pstart(1, 3),Pend(3,
1)P(2, 2)P(2, 2)了Q(10, 2).据我所知,矩形的宽度是2,我可以告诉行开始P(4, 2)而不是P(2, 2).
当该点与XY轴之一不平行时,这会变得更复杂.此外,矩形内部的长度对于对角线而言将是不同的量.
如何计算线点相对于矩形中心和线的终点的起始偏移?
可能我必须找到线穿过矩形的点,然后让线从交叉点开始.但我怎么能得到这一点呢?
对于以下模型,您更喜欢继承还是组合:
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) 鉴于以下内容:
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(),让它更大胆,但它仍然不如我想要的那样.
我怎样画一条粗线?
我想将我的SWT浏览器嵌入swing jframe中.我尝试示例,但它需要调整窗口大小以加载浏览器窗口.如何重新调整画布,我该怎么做?
我有一个带有以下代码的自定义视图:
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:
完整的源代码如下:
package nl.dvandenberg.gauge;
import …Run Code Online (Sandbox Code Playgroud) 我对JNI很陌生,在调查JNI时我偶然发现了这个:
本机代码不仅可以与Java接口,还可以在Java Canvas上绘制,这可以通过Java AWT Native Interface实现
具体/可用的功能是否有特定原因?它是否会改善Windows系统的处理时间?请详细说明为何以及何时使用此类功能