Java 如何创建使用多个类创建图形的单个drawingpanel
我在寻找一个起点,而不是答案,更多的是试图理解这个概念。如何将所有窗口仅放在一个面板/窗口上 创建Java 如何创建使用多个类创建图形的单个drawingpanel,java,class,graphics,Java,Class,Graphics,我在寻找一个起点,而不是答案,更多的是试图理解这个概念。如何将所有窗口仅放在一个面板/窗口上 创建FacebookPerson: public class FacebookPerson{ private String myName; protected String myMood; protected Facebook myfacebook; public FacebookPerson(String name){ myName = name; myfacebook = new Fac
FacebookPerson
:
public class FacebookPerson{
private String myName;
protected String myMood;
protected Facebook myfacebook;
public FacebookPerson(String name){
myName = name;
myfacebook = new Facebook(myName);
//System.out.println("FacebookPerson_Graphics's constructor");
}
public FacebookPerson(){
}
public String getName(){
return myName;
}
public void setMood(String newMood){
myMood = newMood;
myfacebook.setContent(myMood);
}
public String getMood(){
return myMood;
}
}
这是创建和编辑以下内容的代码:
package facebook;
import java.awt.*;
public class Facebook{
private String name;
private String content;
DrawingPanel panel;
private Graphics g;
public Facebook(String nm){
content = "undefined";
name = nm;
// Create the drawing panel
panel =new DrawingPanel(200,150);
g = panel.getGraphics();
// display name
g.drawString(name+"'s mood is undefined.", 20, 75);
}
public void setContent(String newContent){
content = newContent;
if(content.equals("happy")){
g.setColor(Color.red);
g.fillRect(0, 0, 200, 150);
g.setColor(Color.black);
// display mood
g.drawString(name+"'s mood is:"+ "happy", 20, 75);
}
else{
g.setColor(Color.white);
g.fillRect(0, 0, 200, 150);
g.setColor(Color.black);
g.drawString(name+"'s mood is:"+ content, 20, 75);
}
}
public String getContent(){
return content;
}
}
创建用户界面以实现两个类:
package facebook;
import java.util.*;
public class testFacebook{
public static void main (String[] args){
// Prompt user to enter the number of facebookpresons
Scanner userInput = new Scanner(System.in);
System.out.println("Enter the number of facebookpresons to be created: ");
int numP=0;
while(true){
try{
numP = userInput.nextInt();
userInput.nextLine();
if(numP>0 && numP<=9) // accept the number if it is within range. Here we define the range to be from 1 to 5.
break;
else
System.out.println("the number is out of range [1, 9]! enter again");
} catch (InputMismatchException e){
System.out.println("invalid input. Enter an integer number!");
userInput.nextLine();
}
}
FacebookPerson[] fbp = new FacebookPerson[numP];
//Ask the user to enter the name for each person, and create the persons
for(int i=0; i< numP; i++){
System.out.println("Enter the name for person "+ (i+1)+ ":");
String name = userInput.nextLine();
fbp[i] = new FacebookPerson(name);
}
System.out.println("-------select a person and type the mood below--------");
//Ask the user to set the mood for a person, and update the mood, enter "####" to exit
while(true){
System.out.println("Enter the name for a person (enter #### to exit):");
String name = userInput.nextLine();
if(name.equals("####"))
System.exit(0);
int personID = -1;
for(int i=0; i< numP; i++){
if(fbp[i].getName().equals(name)){
personID = i;
break; // break the for loop
}
}
if(personID!=-1){ // found the person, otherwise personID should still be -1
System.out.println("Enter the mood for the person:");
String mood = userInput.nextLine();
fbp[personID].setMood(mood);
}
else
System.out.println("unrecognized name!");
} // end while
} // end main
}
package-facebook;
导入java.util.*;
公共类测试Facebook{
公共静态void main(字符串[]args){
//提示用户输入FaceBookPreson的数量
扫描仪用户输入=新扫描仪(System.in);
System.out.println(“输入要创建的FaceBookPreson的数量:”;
int numP=0;
while(true){
试一试{
numP=userInput.nextInt();
userInput.nextLine();
如果(numP>0&&numP让我们从不执行g=panel.getGraphics();
开始,这不是自定义绘制的工作方式。请查看并获取有关如何进行绘制的更多详细信息
首先定义一个“可绘制”或“可绘制”的概念(使用一个接口定义一个入口点,通过该入口点可以绘制可以绘制的东西)
您希望在“可绘制表面”上绘制的任何内容都应该实现此接口
创建一个“可绘制的曲面”,它可以获取一个可绘制的对象列表,然后绘制它们
public class DrawablePane extends JPanel {
private List<Drawable> drawables;
public DrawablePane() {
drawables = new ArrayList<>(25);
}
public void add(Drawable drawable) {
drawables.add(drawable);
repaint();
}
public void remove(Drawable drawable) {
drawables.remove(drawable);
repaint();
}
@Override
protected void paintComponent(Graphics g) {
for (Drawable drawable : drawables) {
Graphics2D g2d = (Graphics2D)g.create();
drawable(g2d, this);
g2d.dispose();
}
}
}
公共类DrawablePane扩展了JPanel{
私人名单提款;
公共绘图窗格(){
可提取数据=新阵列列表(25);
}
公共空白添加(可提取){
可提取。添加(可提取);
重新油漆();
}
公共空间移除(可提取){
可抽式。移除(可抽式);
重新油漆();
}
@凌驾
受保护组件(图形g){
用于(可提取:可提取){
Graphics2D g2d=(Graphics2D)g.create();
可拉伸(g2d,本);
g2d.dispose();
}
}
}
作为一个想法…让我们先不要做g=panel.getGraphics();
,这不是自定义绘制的工作方式我知道我理解为什么不应该使用g=panel.getGraphics(),但我不理解接口的概念,我的教授还没有介绍。我建议你自己花点时间做一些研究。你可以使用简单的类,但接口更灵活
public class DrawablePane extends JPanel {
private List<Drawable> drawables;
public DrawablePane() {
drawables = new ArrayList<>(25);
}
public void add(Drawable drawable) {
drawables.add(drawable);
repaint();
}
public void remove(Drawable drawable) {
drawables.remove(drawable);
repaint();
}
@Override
protected void paintComponent(Graphics g) {
for (Drawable drawable : drawables) {
Graphics2D g2d = (Graphics2D)g.create();
drawable(g2d, this);
g2d.dispose();
}
}
}