我有以下代码:
public VizCanvas(){
{
this.setBackground(Color.black);
this.setSize(400,400);
}
}
Run Code Online (Sandbox Code Playgroud)
它工作正常,并在黑色背景下显示面板.但是当我实现不做任何操作的paint方法时,颜色会变为默认颜色,即灰色.
我试图设置graphics.setColor()但它没有帮助.
我有一个整数值数组
String[] values={3100,7500,8000,4200,88000,71000,32000};
Run Code Online (Sandbox Code Playgroud)
需要缩放到 my 的已知高度JComponent,问题是如何将这些值缩放到例如 h=600px?
这是一张图片,只是为了更清楚地说明我想要实现的目标:

谢谢
基本上我正在构建一张世界地图.我知道如何有一个方形点击区域.但我想做到这一点,我可以将这些国家放在一起,并能够点击该国家.现在很明显我不能使用方形点击区域因为我有重叠的点击区域.我可以通过查看每个像素的透明度来做到这一点吗?即便如此,我不知道该怎么做?
我刚刚开始使用java 2d图形应用程序,在我的研究重绘是重绘我们的图形浪费了大量资源.但是我想知道什么重绘是什么,有效以及如何有效地使用它,为我画布上的许多可移动动态对象安全快速地线程?
只是试图在Java中绘制多个未填充的三角形旋转中心点.绘制一个三角形,将点旋转一定的半径,然后绘制另一个三角形.
int rad = 10 //Radius between the triangles
int num = 20 //Number of triangles
for (int i = 0; i < num; i++){
// (250,250) would be the center
int[] xPoints = (250,175,325) //X points of the first triangle
int[] yPoints = (250,100,100) //Y points of the first triangle
g.drawPolygon(xPoints,yPoints,3); //Paint the shape
}
Run Code Online (Sandbox Code Playgroud)
当然我的代码只打印第一个三角形,因为我不确定如何旋转这些点.我四处搜寻并发现了一些触发器,但我并不理解它.是否有一种简单的方法来旋转每个点?谢谢.
我感觉非常愚蠢.但是为什么这段简单的代码不会改变椭圆的颜色呢?
基本上我想在椭圆上添加一个鼠标监听器 - 一个图形对象.当鼠标光标为椭圆形时,椭圆会改变其颜色.但是这段代码根本没有改变......这段代码仅供测试.
public class Help extends JFrame{
public static void main(String [] agrs){
Help h = new Help();
h.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
h.add(new Help_Option());
h.setSize(2000, 1000);
h.setVisible(true);
}
}
class Help_Option extends JComponent implements MouseListener{
Ellipse2D ellipse = new Ellipse2D.Double(0, 0, 1000, 500);
Color c = Color.BLACK;
public Help_Option(){
this.addMouseListener(this);
}
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.BLUE);
g2d.draw(ellipse);
g2d.setColor(c);
g2d.fill(ellipse);
}
public void setColor(Color c){
this.c = c;
}
@Override
public void mouseClicked(MouseEvent e) {
} …Run Code Online (Sandbox Code Playgroud) 我只是在玩Java 2D周末项目.我试图完成的只是在远离原点的位置50,50处加载和绘制图像.现在当我尝试做到这一点时,用
g2d.drawImage(imageLeft, 50, 50, 200, 200, null);
Run Code Online (Sandbox Code Playgroud)
然后我得到以下内容:

坦率地说,这让我感到困惑.为什么翻译的x部分与y部分的缩放比例不同?这里发生了什么?必须是一个明显的初学者的错误,但我无法弄清楚这种行为对我的生活的原因;-)
我用来绘制图像的完整代码是:
final IsogenWindow window = new IsogenWindow();
final BufferedImage imageLeft = loadImage(new File(getClass().getResource("/texture/tile1.png").toURI()));
final Graphics2D g2d = Graphics2D)window.getGraphics();
window.setSize(1000, 1000);
window.setVisible(true);
g2d.drawImage(imageLeft, 50, 50, 200, 200, null);
Run Code Online (Sandbox Code Playgroud)
编辑1:为了尝试DontRelaX的建议,我更改了我的代码,因此面板被添加到JFrame并且其Graphic2D对象用于绘图:
getContentPane().setLayout(null);
this.renderPanel = new JPanel();
getContentPane().add(renderPanel);
final Graphics2D g2d = (Graphics2D)renderPanel.getGraphics();
...
g2d.drawImage(imageLeft, 50, 50, 200, 200, null);
Run Code Online (Sandbox Code Playgroud)
不幸的是,结果仍然相同.但我认为DontRelaX走在正确的轨道上.还有什么建议?
编辑2:基本上DontRelaX的回答是正确的.我确实不使用renderPanel的Graphics2D,而是使用JFrame的Graphics2D对象.
干杯,nanoquack
我正在尝试绘制一个从红色到蓝色的渐变矩形.我有以下代码:
g2d.setPaint(new GradientPaint(0, 0, Color.RED, 1000, 1000, Color.BLUE));
g2d.fillRect(0, 0, 1000, 1000);
Run Code Online (Sandbox Code Playgroud)
这很有效.然而,渐变的方向是对角线,从矩形的左上角到右下角(另一种看待这个的方式是渐变跟随线 y=-x + windowHeight)
我希望我的渐变从上到下.所以矩形的整个顶部是红色的,整个底部是蓝色的.换句话说,颜色应该只随y坐标变化,给定任何y =点线,颜色在该线上应该是均匀的.
我怎么能做到这一点?
我需要绘制一个具有给定厚度的环,看起来像这样:
中心必须是透明的,这样它就不会覆盖以前绘制的形状.(或其他戒指)我尝试过这样的事情:
//g is a Graphics2D object
g.setColor(Color.RED);
g.drawOval(x,y,width,height);
g.setColor(Color.WHITE);
g.drawOval(x+thickness,y+thickness,width-2*thickness,height-2*thickness);
Run Code Online (Sandbox Code Playgroud)
它绘制了一个令人满意的戒指,但它涵盖了其他形状; 内部是白色的,不透明.如何修改/重写我的代码,以便它不会这样做?