当前位置: 首页 > 面试题库 >

JAVA无法从另一个类中绘制到JFrame

谷隐水
2023-03-14
问题内容

我知道这是我的错误。我的问题是,为什么这不起作用,我想念的是什么,我可以称其为方法而不是类,因此我假设他们的第三类有问题吗?

第1类:

package assignment.pkg1.java;

import java.awt.Color;
import javax.swing.JFrame;

public class JVMVeiwer  {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    final int FRAME_WIDTH = 1000; // Frame Width
    final int FRAME_HEIGHT = 800; // Frame Height
    JFrame frame = new JFrame();

    frame.setSize(FRAME_WIDTH, FRAME_HEIGHT); //Sets Frame Size
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setTitle("JVM Diagram");// Sets the Title       
    JVMComponent component = new JVMComponent();
    frame.setBackground(Color.WHITE);
    frame.add(component); // adds the diagram to the JFrame       
    frame.setVisible(true); // Makes the frame visible
}

}

第2类:

package assignment.pkg1.java;

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


public class JVMComponent extends  JComponent {

@Override
public void  paintComponent(Graphics g) {      
    super.paintComponent(g);        
    Graphics2D g2 = (Graphics2D) g; // recover the graphic  
    JVMDiagram diagram = new JVMDiagram(); // creates an instance of JVM Diagram
    diagram.draw(g2);
  }
}

第3类,这是我不能在jframe上使用的绘画:

package assignment.pkg1.java;

import java.awt.Color;
import java.awt.Graphics2D;
import javax.swing.JComponent;

public class JVMDiagram {
// Constructor
public JVMDiagram() {

}
// Draw method for shape
public  void draw(Graphics2D g2) {
// Detailed instructions to draw shape
    int x = getWidth();
    int y = getHeight();
    int temp, temp2;
    int width = x / 2;
    int height = x / 2;
    x = (x - width) / 2;
    y= (y - height) / 2;

    g2.setColor(Color.RED);
    g2.drawOval(x, y, width, height);
    g2.drawRect(x, y, width, height);
    g2.setColor(Color.RED);
    g2.drawLine(x, y, width + x, height + y);
    g2.drawRoundRect(x, y, width, height, y, y);

    g2.drawLine(x + width, y, x, height + y);
}

}


问题答案:

您的问题是您滥用继承。您的JVMDiagram正在扩展JVMComponent,但不应该。是的,您获得了JVMComponent的getWidth()和getHeight()方法,但是它们没有任何意义,因为JVMDiagram没有作为组件添加到GUI中,不应作为组件添加,并且高度为0,并且宽度(打印出来)。

重新考虑您的设计, 不要
为此使用继承。如果需要,可以将值从一个对象传递到另一个。例如,在JVMComponent中创建一个JVMDiagram字段并将其初始化。在JVMComponent的paintComponent方法的JVMDiagram绘制方法中使用Graphics2D传递宽度和高度。

附带问题:永远不要repaint()从绘画方法内部进行调用,也不要从绘画方法内部进行调用的代码进行调用。



 类似资料:
  • 我正在创建一个简单的Java2D程序。它应该从另一个类中绘制矩形,但它不起作用。如果你们中有人能花点时间看看我哪里出了问题,我将不胜感激。这是我明天要交的最后一项作业。 以下是我迄今为止所编写的代码: Block.java 下面是主类: 非常感谢。

  • 问题内容: 我可能做错了,所以请保持友好。我正在开发Java游戏,并且处于测试角色移动/动画的阶段。 “人”可以在网格上左右移动。绘制网格的类是gamePanel类。这些按钮在gameControlPanel类中。 我有一个按钮,可以在网格上生成一个人。然后,我有一个按钮可以左右移动该人。 当按下上移按钮时,它将从人员类中调用上移方法。(目前,我一次只测试一个“人”。)在该方法中是以下代码… 问题

  • 我已经阅读了很多stackoverflow的页面,但是我无法将我的ArrayList复制到另一个类中。下面是一个场景,我正在构建一个快速的图书储蓄应用程序,类似于图书馆中的应用程序,但更简单(用于学校)。 我有我的主库类(带有main),它为主菜单/选项设置了swing。 我有一个带有新书构造函数的book类,如下所示: 在这个类中,我在确认按钮上添加了一个,以确认上要作为对象添加的输入,如下所示

  • 问题内容: 我正在研究一个问题,但由于刚开始学习Java而感到非常困惑。我可以理解的任何帮助都会很棒。我必须编写一个具有两个类的程序。主类将从文件中读取内容,并使用第二类来查找文件中相同单词被重复的次数,然后将它们添加到包含单词和单词重复次数的数组中。我可以阅读文件部分。我只是似乎不知道如何从第二个类调用方法以将单词添加到数组并增加计数器。到目前为止,这是我的代码,如果您运行它,您将看到多少错误会

  • 我正试图将数据复制到数组中,但出现了一个错误,称无法转换类型。我该怎么解决这个问题?

  • 问题内容: 我有两个具有相同属性名称的java类。如何将所有属性复制到另一个装有数据的bean中。我不想使用传统形式来复制属性,因为我有很多属性。 提前致谢。 1班 2班 问题答案: 用途: