绘制到GUI从主要使用另一个类在Java中

时间:2015-09-27 23:29:38

标签: java swing user-interface main

我是初学程序员,所以我不知道所有的词汇,但我了解java的一些基础知识。

所以我试图使用另一个类从main中绘制GUI。我知道我不是很具体,但这是我的代码,我会尝试解释我想要做的事情。

这是我的主要

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

public class ThisMain {


public static void main(String[] args) {
    // TODO Auto-generated method stub
    JFrame theGUI = new JFrame();
    theGUI.setTitle("GUI Program");
    theGUI.setSize(600, 400);
    theGUI.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    ColorPanel panel = new ColorPanel(Color.white);
    Container pane = theGUI.getContentPane();
    pane.add(panel);
    theGUI.setVisible(true);



    }
}

这是我的其他课程

import javax.swing.*;
import java.awt.*;
public class ColorPanel extends JPanel {
    public ColorPanel(Color backColor){
    setBackground(backColor);

}

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

}
}

我正在尝试使用

 ColorPanel panel = new ColorPanel(Color.white);

或类似的东西,比如

 drawRect();

在主屏幕中并在GUI中绘制。

这是我认为最接近工作的代码

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

public class ThisMain {


    public static void main(String[] args) {
        // TODO Auto-generated method stub
        JFrame theGUI = new JFrame();
        theGUI.setTitle("GUI Program");
        theGUI.setSize(600, 400);
        theGUI.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        //I'm trying to draw a string in the JFrame using ColorPanel but i'm            Trying to do it from the main
        ColorPanel panel = new ColorPanel(){
            public void paintComponent(Graphics g){
                super.paintComponent(g);
                //This is the line I need to work using the ColorPanel in anyway
                g.drawString("Hello world!", 20, 20);
        };
        Container pane = theGUI.getContentPane();
        //The errors occur here
        pane.add(panel);
        theGUI.setVisible(true);


    //and on these brackets
    }
}

2 个答案:

答案 0 :(得分:2)

我不确定你到底想要做什么(你还没有回复我对你的问题的评论澄清),但我会:

  • 为您的ColorPanel添加List<Shape>
  • 给它一个public void addShape(Shape s)方法,允许外部类将形状插入此List,然后调用repaint()
  • 在ColorPanel的paintComponent方法中,遍历List,使用Graphics2D对象绘制每个Shape项。

请注意,Shape是一个接口,因此List可以容纳Ellipse2D对象,Rectangle2D对象,Line2D对象,Path2D对象以及实现该接口的大量其他对象。此外,如果您想将每个Shape与颜色相关联,则可以将项目存储在Map<Shape, Color>中。

答案 1 :(得分:0)

您无法编译的原因是由以下行引起的:

ColorPanel面板= new ColorPanel(Color.white);

因为类ColorPanel不包含在swing库中,所以你必须对它进行编码。此代码扩展了JPanel并包含一个采用Color参数的构造函数。构造函数在实例化面板时运行并设置其背景颜色:

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

public class ColorPanel extends JPanel {
   public ColorPanel(Color backColor) {
    setBackground(backColor);
  }
}