- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我使用 AWT/Swing 的第一个项目。我正在尝试设计一个简单的元胞自动机。我在选择布局管理器时遇到了一些问题,现在我使用 GridLayout 因为它是最接近我想要的。但是,当尝试在 JPanel 中放置单元格时,坐标无法按我的预期工作。也许我不应该从 JComponent 扩展并使用 fillRect() ?或者也许 GridLayout 不是我需要的布局?主要问题是点 (0,0) 似乎在“移动”。 fillRect 与 GridLayout 冲突吗?
注1:我尝试过 GridBagLayout 但没有成功(因为我不知道如何配置它)。我也尝试过 add(component, x, y) 方法,但它不起作用。
注 2:我没有发布有关单元格状态的代码,因为它不相关。
编辑:好的,我在一个公共(public)类中编写了一个示例,我认为我无法更简洁并重现相同的结果。
解决方案: https://docs.oracle.com/javase/tutorial/uiswing/painting/refining.html
这是我的代码:
public class Example{
class Cell extends JComponent{
private int x = 0; //Cell position ?
private int y = 0;
public Cell(int x, int y){
this.x = x;
this.y = y;
}
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
//draw cell
g.setColor(Color.white);
g.fillRect(x,y,15,15);
}
}
Example(){
JFrame frame = new JFrame("title");
frame.setBackground(Color.black);
frame.getContentPane().setPreferredSize(new Dimension(300,300));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
JPanel box = new JPanel(new GridLayout(20,20)){
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
setBackground(Color.black);
//draw grid
for(int i = 0; i <= this.getHeight(); i += 15){
g.drawLine(0,0+i,getWidth(),0+i);
}
for(int i = 0; i <= this.getWidth(); i += 15){
g.drawLine(0+i,0,0+i,getHeight());
}
}
};
/*box.add(new Cell(0,0)); //TEST 1
box.add(new Cell(0,0));
box.add(new Cell(0,0));
box.add(new Cell(0,0));*/
box.add(new Cell(0,0)); //TEST 2
box.add(new Cell(15,0));
box.add(new Cell(30,0));
box.add(new Cell(45,0));
frame.add(box);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args){
new Example();
}
}
这是测试 1 和测试 2 对应的结果:
最佳答案
所有绘画都是相对于包含自定义绘画的组件完成的,而不是相对于您添加组件的面板。
所以在你的例子中,只需从 (0, 0) 开始绘画即可。
布局管理器会将 Cell 放置在布局管理器确定的位置。
注意:
绘画方法仅用于绘画。它永远不应该创建一个组件,就像您当前的 Box 类所做的那样。
基本逻辑是:
getPreferredSize()
方法,以便布局管理器可以使用此信息来定位添加到面板中的每个组件。如果你想管理面板上不同位置的绘画,那么不要使用真正的组件。相反,您保留要绘制的形状的 ArrayList。每个形状都包含应绘制的位置。然后,您在paintComponent() 方法中迭代ArrayList 来绘制每个形状。有关此方法的示例,请查看 Custom Painting Approaches 中的 Draw On Component
示例。 .
关于java - fillRect() 使用哪个坐标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51158443/
为什么会这样: var rows = 80 var cols = 120 var tw = 5 for(var i = 0; i < rows; i++){ for(var j = 0; j
为什么 context.fillRect(10, 10, 20, 20) 填充了一个矩形,但是当使用像player.x或player.y这样的变量时,它不起作用? 如果我在JavaScript控制台中
这是我使用 AWT/Swing 的第一个项目。我正在尝试设计一个简单的元胞自动机。我在选择布局管理器时遇到了一些问题,现在我使用 GridLayout 因为它是最接近我想要的。但是,当尝试在 JPan
可疑的 fillRect() 速度 好吧,让我直截了本地说。 Java 通过遍历数组并将 rgb 值更改为指定颜色来填充矩形。如果它所做的只是改变颜色,那么如果它所做的只是改变数组中的整数,为什么 T
我在屏幕上绘制矩形时遇到问题。我的 jpanel 类中有 paintComponent 方法,我想在其中绘制一个矩形。它看起来像这样: public void paintComponent( Grap
我想为我创建的游戏制作背景。我在使用 fillRect 时遇到了一些问题。getHeight 和 getWidth 是否必须按特定顺序排列,还是应该使用 getX/Y/Height/Width? pr
在我的代码中: void Surface::paintBorders(const Color& color, int borderWidth){ HBRUSH colorBrush = CreateS
我有一个带有 iframe 的网页,并且在该 iframe 中有一个带有 id="canvas"的 Canvas ,当我在整个 Canvas 的上下文中调用(从 iframe 中的 .js 文件)fi
我正在使用 canvas fillrect 函数绘制多个矩形。我现在正在对坐标进行硬编码,但是是否可以像对函数的函数调用一样将它们传递给填充矩形?例如,如果我有 10 组坐标,我可以使用 for 循环
我使用负数让 fillRect() 走相反的路。它在我的电脑上运行良好,但我的 friend 看不到它正常运行。我该怎么办? page.fillRect (12, 12, -5, 10); 最佳答案
我正在使用 JavaScript 开发一个资源监视器,并假装用一个很酷的背景动画来完成它。 我在 fillStyle 中使用 fillRect 和透明颜色时遇到问题,例如: funct
我正在使用 fillRect 在 Canvas 上绘制矩形。我想添加文本,我希望它像编辑框一样可编辑。有没有办法在 JavaScript 中实现这一点? 我不需要 fillText,因为我希望文本在
我正在用 Java 编写一个关于躲避橙色红色方 block 并单击它们将其删除的游戏。但是,我需要弄清楚如何编写代码来在首先单击 fillRect 时执行操作,如果这是不可能的,那么至少有一种方法可以
当我使用它时,唯一填充的是一个白色 矩形,与参数无关。这就是我所做的: var map:Bitmap = new Bitmap (new BitmapData(200,200)) map.bitmap
我喜欢制作直方图。使用drawLine(),这对我来说并不是真正的问题,但是当我尝试使用fillRect()时,矩形会从上到下移动。我想用drawLine()绘制看起来与我的直方图相似的直方图。 这是
我正在尝试使用 Java 中的 fillRect 方法用图像填充矩形。有没有办法使用 fillRect 方法来做到这一点? 这是我正在编写的代码: private int x = 0;
嗨,我目前正在开发一个 Java 应用程序,我必须使用 Canvas、Graphics 等进行一些绘制。 因此,如果我单击一个点并将其拖过,它之间应该画一条线(想想在油漆中画一条线)。 我目前正在使用
Java 新手,遇到了一些让我摸不着头脑的事情。我正在尝试制作一个具有黑色背景的 GUI,可以在其上绘制线条来模拟一组 7 段显示器。另外,我还会有一系列的Jbuttons。我遇到的问题是我可以做其中
我有这个非常简单的代码: private static final int SKY_COLOR = Color.rgb(161, 210, 241); private static final int
我正在执行一项任务,其中涉及使用 x/y 坐标在 500px*500px JFrame 上的某些位置绘制内容。我可以让程序绘制一个位置,但是它完全忽略通过扫描仪从输入文件接收到的信息,只是在左上角绘制
我是一名优秀的程序员,十分优秀!