这可能是一个非常无聊的问题.我刚刚开始学习Java
我不明白paintComponent方法的操作.我知道如果我想画一些东西,我必须覆盖paintComponent方法.
public void paintComponent(Graphics g)
{
...
}
Run Code Online (Sandbox Code Playgroud)
但它何时被称为?我从来没有看到像"object.paintComponent(g)"这样的东西,但它仍然是在程序运行时绘制的.
什么是Graphics参数?这个从哪里来?调用方法时必须提供参数.但正如我之前所说,似乎永远不会明确地调用此方法.那么谁提供这个参数呢?为什么我们必须将其转换为Graphics2D?
public void paintComponent(Graphics g)
{
...
Graphics2D g2= (Graphics2D) g;
...
}
Run Code Online (Sandbox Code Playgroud) 我正在做一个项目,我正在尝试制作一个绘画程序.到目前为止,我已经使用Netbeans创建了一个GUI并设置了该程序.
到目前为止,我可以调用所有必要的协调来绘制内部,但我对如何在其中进行实际绘制非常困惑.
在我的代码结束时,我尝试在面板内绘图失败.
谁能解释/展示如何在这样的例子中使用图形?
我找到的所有示例都创建了一个类并对其进行了扩展,JPanel但我不知道是否可以执行此操作,因为它是在netbeans中生成的.
我需要画在里面JPanel,在我的内心JFrame.我不知道在哪里放图形类.
package javapaint;
import java.awt.*;
import javax.swing.*;
public class JavaPaintUI extends javax.swing.JFrame {
public JavaPaintUI() {
initComponents();
}
private void initComponents() {
jPanel2 = new javax.swing.JPanel();
jPanel2.setBackground(new java.awt.Color(255, 255, 255));
jPanel2.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
jPanel2.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
jPanel2MousePressed(evt);
}
public void mouseReleased(java.awt.event.MouseEvent evt) {
jPanel2MouseReleased(evt);
}
});
jPanel2.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
public void mouseDragged(java.awt.event.MouseEvent evt) {
jPanel2MouseDragged(evt);
}
});
pack();
}// </editor-fold>
int currentX, currentY, oldX, oldY; …Run Code Online (Sandbox Code Playgroud) 是什么之间的实际差异paint(),paintComponent()以及paintComponents()在的Java Swing?
我试图理解Oracle文档中解释的内容,但我不清楚.
我开发了一种用于定位塔架信号强度的电信应用.我使用了java swing,当我在移动信号发射塔位置的给定点周围绘制圆圈时遇到问题.我已经计算了X,Y坐标和半径值.
请找到我用来绘制圆圈的下面的代码,它有问题.
JPanel panelBgImg = new JPanel() {
public void paintComponent(Graphics g) {
g.drawOval(X, Y, r, r);
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,它创建了圆圈,但没有将X和Y坐标作为中心点.将X和Y坐标作为圆的左上角.
任何人都可以通过将给定的X和Y坐标作为圆的中心点来帮助我绘制圆.
我真的被困在如何编程这个.如何在Java中用半径绘制一个圆并围绕边缘指向?
我需要在具有半径的JFrame中绘制一个圆并围绕圆周指向.我可以在数学上计算如何找到边缘点的坐标,但我似乎无法编程圆.我目前正在使用Ellipse2D方法,但这似乎不起作用并且不返回半径,因为根据我的理解,它不从中心绘制圆而是使用高度和宽度从起始坐标绘制.
我当前的代码是在一个单独的框架上,但我需要将它添加到我现有的框架.
import java.awt.*;
import javax.swing.*;
import java.awt.geom.*;
public class circle extends JFrame {
public circle() {
super("circle");
setSize(410, 435);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Panel sp = new Panel();
Container content = getContentPane();
content.add(sp);
setContentPane(content);
setVisible(true);
}
public static void main (String args[]){
circle sign = new circle();
}
}
class Panel extends JPanel {
public void paintComponent(Graphics comp) {
super.paintComponent(comp);
Graphics2D comp2D = (Graphics2D) comp;
comp2D.setColor(Color.red);
Ellipse2D.Float sign1 = new Ellipse2D.Float(0F, 0F, 350F, 350F);
comp2D.fill(sign1);
}
}
Run Code Online (Sandbox Code Playgroud) 我试图在我的应用程序上以红色阴影绘制一个矩形,但我需要使它变得透明,以便它下面的组件仍然显示.但是我仍然想要一些颜色仍然会显示.我正在绘制的方法如下:
protected void paintComponent(Graphics g) {
if (point != null) {
int value = this.chooseColour(); // used to return how bright the red is needed
if(value !=0){
Color myColour = new Color(255, value,value );
g.setColor(myColour);
g.fillRect(point.x, point.y, this.width, this.height);
}
else{
Color myColour = new Color(value, 0,0 );
g.setColor(myColour);
g.fillRect(point.x, point.y, this.width, this.height);
}
}
}
Run Code Online (Sandbox Code Playgroud)
有谁知道我怎么能让红色阴影有点透明?我不需要它完全透明.
我将JPanel子类化为覆盖paintComponent(Graphics),我想在jframe中将图像绘制到jpanel上.
但是在我改变jframe的大小之前,我的图像还没有显示出来.这是我的代码:
public class ImagePanel extends JPanel{
public void setImage(BufferedImage bi)
{
image = bi;
revalidate();
}
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
if(image != null)
{
g.drawImage(image, 0, 0, this);
}
}
}
Run Code Online (Sandbox Code Playgroud) 从最初的问题(下面),我现在提供以下奖励:
AlphaComposite圆角的基础解决方案.
JPanel. 希望有人快速选择这个,这似乎很容易.
如果有一个充分解释的原因,为什么永远不会这样做,其他人同意,我也会奖励赏金.
这是我想到的一个示例图像(但使用AlphaComposite)
原始问题
我一直试图找到一种使用合成来做圆角的方法,非常类似于如何用Java制作圆角图像或http://weblogs.java.net/blog/campbell/archive/2006/07/ java_2d_tricker.html.
但是,我没有中间BufferedImage的尝试不起作用 - 圆形目标合成显然不会影响源.我尝试了不同的东西,但没有任何作用.应该得到一个圆形的红色矩形,而不是我得到一个正方形.
所以,我有两个问题,真的:
1)有没有办法使这项工作?
2)中间图像是否会实际产生更好的性能?
SSCCE:
测试面板TPanel
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JLabel;
public class TPanel extends JLabel {
int w = 300;
int h = 200;
public TPanel() {
setOpaque(false);
setPreferredSize(new Dimension(w, h));
setMaximumSize(new Dimension(w, h));
setMinimumSize(new Dimension(w, h));
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d …Run Code Online (Sandbox Code Playgroud) 我已经尝试过这方面的教程,但我仍然不太了解它.基本上我的问题是哪种方法更好,为什么?我应该使用paint或paintComponent?
请尽量保持答案简单,谢谢.
我正在用java制作游戏,我想创建一个倾盆大雨的模拟.云应该在下雨时向右移动.移动云是没有问题的.这是我正在努力的下雨.
我想要做的是使用计时器绘制一个矩形,这应该看起来像是在云中的随机x值下雨.然后每100毫秒将下降的y值加1.但我不想为每次降雨创建100个不同的矩形,x变量和y变量.
知道我怎么能做到这一点?建议赞赏!
这是一场2D游戏..对不起.
java ×10
paintcomponent ×10
swing ×9
jpanel ×2
colors ×1
compositing ×1
draw ×1
drawing ×1
geometry ×1
java-2d ×1
paint ×1
translucency ×1