标签: paintcomponent

将变量与paintComponent一起使用

对于家庭作业,我试图paintComponent使用用户输入的变量绘制一个框.我已经能够使用固定数字构建我需要做的事情.我整天都在研究这个问题,但却找不到实现变量的方法.这是我正在研究的精简版:

import javax.swing.*;
import java.awt.*;

public class Problem3 extends JFrame{

  public static void main(String[] args) {  
    int xCoord = Integer.parseInt(
            JOptionPane.showInputDialog("Enter an X cord."));

    JFrame gd = new JFrame();
    gd.setLocationRelativeTo(null);
    gd.setSize(300, 300);
    gd.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    gd.setVisible(true);

    gd.add(new NewPanel());   
  }

  public int getX(){
    return xCoord;
  }
}

class NewPanel extends JPanel {

  int xCoord = getX();

  protected void paintComponent(Graphics g){
    super.paintComponent(g);

    g.drawRect(10,10,xCoord,50);
  }
}
Run Code Online (Sandbox Code Playgroud)

编辑

自从发布在这里以来,我尝试在NewPanel类中使用setter方法

public void setX() {
    xCoord = Integer.parseInt(
            JOptionPane.showInputDialog("Enter an X cord."));
}
Run Code Online (Sandbox Code Playgroud)

运行这导致一个我从未见过的奇怪错误:我得到一个StackOverFlow错误然后对话框弹出多次/数百次并且不会停止弹出.

编辑3使用气垫船完整的鳗鱼解决方案,我让它工作! …

java swing paintcomponent

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

简单的自定义Swing JComponent总是平坦的

我正在玩Swing,我正在研究一个非常简单的Swing组件.我有一个继承自JComponent类的组件,它的UI继承自ComponentUI.该paint()方法如下所示:

public void paint(Graphics g, JComponent c) {
    int x = c.getX();
    int y = c.getY();
    c.setBounds(x, y, 100, 25);
    int width = c.getWidth();
    int height = c.getHeight();
    Rectangle r = g.getClipBounds();
    g.fillRect(0, 0, 10, 10);
    g.drawString("Baf!", 3, 3);
}
Run Code Online (Sandbox Code Playgroud)

但是完全不可能得到另一个r.height超过1的值.组件的宽度是给定的,但高度总共只有一点.有没有其他人经历过类似的组件?不幸的是,没有任何简单的教程.所有教程都难以理解(或过时).

看起来,布局管理器总是将此组件的大小调整为1个高度(无论最小值).

java swing paint jcomponent paintcomponent

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

Java我只想在变量更改时重绘

我有一种方法可以写出剩下多少猜测,并且我希望每次人们错过字母或单词时都要重新绘制,但是它会一直重新绘制,这会导致整个程序不断闪烁.

我的方法看起来像这样:

public void repaintWord(Graphics g){
    g.SetColor(Color.RED);
    g.drawString("You have " + getN() + " guesses left", 400, 50);
    repaint();
}
Run Code Online (Sandbox Code Playgroud)

当getN()改变它的值时,如何只重画一次?

java swing repaint paintcomponent

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

图像未加载

框架窗口正在启动,但背景和前景图像未加载,窗框尺寸也非常小.请帮我修复错误.

这是发布的代码

Aquarium.java

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import java.awt.image.ImageObserver;
import java.util.Vector;

public class Aquarium extends Frame implements Runnable
{
    Image aquariumImage,memoryImage;
    BufferedImage bImage;
    Graphics memoryGraphics;
    Image [] fishImages=new Image[2];
    MediaTracker tracker;
    int numberFishes=12;
    Vector<Fish> fishes=new Vector<Fish>();
    Thread thread;
    boolean runOk=true;
    int sleepTime=110;
    Fish fish;

    Aquarium()
    {

        //set the title and assign tracker object
        setTitle("The Aquarium ");
        tracker=new MediaTracker(this);


        //add images to the tracker object to trace it


        fishImages[0]=Toolkit.getDefaultToolkit().getImage("src\fish1.gif");


        tracker.addImage(fishImages[0], 0);

        System.out.println("fish 1 size "+Toolkit.getDefaultToolkit().getImage("src\fish1.gif").getWidth(null));
        fishImages[1]=Toolkit.getDefaultToolkit().getImage("src\fish2.gif");


        tracker.addImage(fishImages[1], …
Run Code Online (Sandbox Code Playgroud)

java swing image frame paintcomponent

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

repaint()没有调用PaintComponent来使用Graphics2D

我花了几天时间试图让Graphics2D类在我的代码中工作.我以这样的方式构造它,当注册click事件时,对repaint的调用完成,但是当它到达调用repaint()的阶段时,它只产生一个nullpointer异常.

它在调试时都按预期工作,而不是在paintComponent方法中调用,但是当尝试使用paintComponent和repaint()正确调用代码以允许Graphics2D类显示每个点的行时,它不起作用.

我已经包含了我的代码部分,我很难开始工作.任何帮助都将非常感激.先感谢您.

下面是包含我的mouseListener的GUI类.

public class GUI extends JPanel implements MouseListener {

private JLabel label;

    public BufferedImage getImg() {
    return img;
    }

    public void mouseClicked(java.awt.event.MouseEvent e) {
    // TODO Auto-generated method stub
    label = new JLabel();

    //set point equal to the location of the mouse click on the image label
    Point b = e.getPoint();

    //place we are going to print the dots
    segmentation.x = b.x; //gets the x coordinate 
    segmentation.y = b.y; //gets the y coordinate

    System.out.println("x = " + …
Run Code Online (Sandbox Code Playgroud)

java swing bufferedimage graphics2d paintcomponent

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

JPanel没有显示我的图形

我在绘制JPanel时遇到问题.这就是我目前正在做的事情.我知道图像是有效的,因为我已将它写入此类的文件并获得我想要绘制的精确图像,但是当我尝试将其绘制到JPanel时,它似乎立即被删除.我试过谷歌,但已经干了.有任何想法吗?

import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

import utilities.Log;

public class Signature extends JFrame {

    /**
     *
     */
    private static final long serialVersionUID = 8908413895953622794L;
    private JPanel contentPane;
    private JPanel panel;
    private BufferedImage image;

    /**
     * Create the frame.
     */
    private Signature() {
        setResizable(false);

        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        setBounds(100, 100, 631, 338);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);



        JLabel lblDateSigned …
Run Code Online (Sandbox Code Playgroud)

java graphics swing jpanel paintcomponent

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

Java:mouseDragged并在图形界面中移动

新手程序员在这里.

我正在制作一个程序,用于在笛卡尔坐标系中呈现用户输入的方程式.目前我遇到一些让用户在坐标中自由移动视图的问题.目前使用mouseDragged,用户可以稍微拖动视图,但是一旦用户释放鼠标并尝试再次移动视图,原点就会快速回到鼠标光标的当前位置.让用户自由移动的最佳方法是什么?提前致谢!

这是绘图区域的代码.

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.geom.Line2D;
import java.awt.geom.Point2D;
import javax.swing.JPanel;
public class DrawingArea extends JPanel implements MouseMotionListener {

private final int x_panel = 350; // width of the panel
private final int y_panel = 400; // height of the panel
private int div_x; // width of one square
private int div_y; // height of one square

private int real_y;
private int real_x;
private Point origin; …
Run Code Online (Sandbox Code Playgroud)

java swing drag-and-drop awt paintcomponent

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

Java-repaint()替代方案

这是我的简单代码,它在椭圆形光标附近绘制.每次点击框架都会重新绘制,当时只能绘制一个椭圆形.我想知道如何使每个椭圆形图形点击以留在框架上.谢谢你每个建议.

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class Buffer extends JPanel implements MouseListener{
public static JFrame frame;
public static boolean check;

public void paintComponent(Graphics g){
    super.paintComponent(g);
    if(check==true){
        g.drawOval((int)MouseInfo.getPointerInfo().getLocation().getX(), (int)MouseInfo.getPointerInfo().getLocation().getY(), 10, 10);
    }
}

public static void main(String args[]){
    Buffer x=new Buffer();
    x.setBackground(Color.cyan);

    frame=new JFrame();
    frame.setSize(500,500);
    frame.addMouseListener(x);
    frame.add(x);
    frame.setVisible(true);
    }

public void mouseClicked(MouseEvent e){
    check=true;
    repaint();
    }

public void mouseEntered(MouseEvent arg0){}
public void mouseExited(MouseEvent arg0){}
public void mousePressed(MouseEvent arg0){}
public void mouseReleased(MouseEvent arg0){}
 }
Run Code Online (Sandbox Code Playgroud)

java swing repaint paintcomponent

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

如何防止绘制的形状在Java中消失?

我正在开发一个项目来创建一个绘制随机形状的屏幕保护程序.我有几个问题,但我现在主要关心的是如何让形状保持在屏幕上而不是在它们被创建后消失.这是我的代码.我不能使用任何循环,我不想改变我所拥有的任何功能(除了可能的shapesDrawn).

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class ScreenSaver2 extends JPanel implements ActionListener {
    private JFrame frame = new JFrame("FullSize");
    private Rectangle rectangle;
    boolean full;


    protected void paintComponent(Graphics g) {
        int r = (int)(Math.random() * 255);
        int gr = (int)(Math.random() * 255);
        int b = (int)(Math.random() * 255);
        Color color = new Color(r, gr, b);
        int width = 10 + (int)(Math.random() * 40);
        int height = 10 + (int)(Math.random() * 40);
        int x = (int)(Math.random() * (getWidth() - width)); …
Run Code Online (Sandbox Code Playgroud)

java swing drawing jpanel paintcomponent

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

在JPanel中绘制钟摆随时间的旋转

我试图在JPanel中描述摆臂随时间的演变.钟摆具有固定节点,而另一个节点基于固定的一个和从文件中取出的一些角度来计算.每隔1秒我就会看到用新坐标重新绘制钟摆.为了描述我的问题,我已经删除了文件和角度计算,请考虑将移动点保存到Points的ArrayList中.

我试图通过从RotateLine对象的构造函数中调用drawRotatingLine()方法来实现逐渐旋转.在drawRotatingLine()方法中,我有一个for循环:

  • 根据PointsList of Points的值设置移动点的坐标
  • 引入1秒的睡眠
  • 并调用repaint()方法

麻烦的是,我只有我的程序绘制初始位置,然后是最后一个,中间的那些没有画画.

从这里到那里把代码放在一起是非常不完整的.请原谅我滥用BufferedImage,Graphics2D,以及在paintComponent(...)方法中对这些对象的调用对我来说并不完全清楚,我只是需要完成这个程序,在我的经验的这个阶段,我发现JPanels上有相当复杂的绘图.

以下是整个代码:

public class RotateLine extends JPanel {

private static final int PREF_W = 600;
private static final int PREF_H = 600;
private static final int X1 = 100;
private static final int Y1 = 100;
private BufferedImage image;
private Graphics2D bufferedGraphics;
private static ArrayList<Point> pointsList;
private static Point p;
private int counter = 0;

public RotateLine () {
    pointsList = new ArrayList<Point>();
    p = new Point(X1, Y1);
    int X2 = 400; …
Run Code Online (Sandbox Code Playgroud)

java bufferedimage jpanel graphics2d paintcomponent

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