السلام عليكم لقد قمت بتعريف 2 class
لرسم graph يمثل مصفوفة
المصفوفة معرفة ب الكلاس الاول وحتى اجعل الكلاس الثاني يتعرف عليها قمت بتعريفها puplic ولكن لا فائدة
فقمت بعمل ميثود يستقبل المصفوفة في الكلاس الثاني
ولكن لاحظت وجود مشكلة وهي انه في الميثود
class NewPanel extends JPanel {
int[][] arr=new int[7][7];
int size=7;
public void enterDest(int y[][]){
for(int i=0;i<y.length;i++){
for(int j=0;j<y.length;j++){
arr[j]=y[j];
System.out.println(arr[j]);
}}
}يستقبل المصفوفة الافتراضية قبل ادخال القيم اليها فيتعامل معها اصفار
كيف اجعله يتعرف على المصفوفة كاملة
الكود
import java.util.ArrayList;
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
public class TestPanelDrawing extends JFrame {
public int arr[][]={{0,0,6,5,0,2,0},{0,0,-1,-1,0,2,0},{6,-1,0,3,3,2,0},{5,-1,3,0,5,2,0},{0,0,3,5,0,2,0},{2,2,2,2,2,0,7},{0,0,0,0,0,7,0}};
public TestPanelDrawing() {
NewPanel s=new NewPanel();
s.enterDest(arr);
add(new NewPanel());
}
public static void main(String[] args) {
TestPanelDrawing frame = new TestPanelDrawing();
frame.setTitle("TestPanelDrawing");
frame.setLocationRelativeTo(null); // Center the frame
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600, 400);
frame.setVisible(true);
}
}
class NewPanel extends JPanel {
int[][] arr=new int[7][7];
int size=7;
public void enterDest(int y[][]){
for(int i=0;i<y.length;i++){
for(int j=0;j<y.length;j++){
arr[j]=y[j];
System.out.println(arr[j]);
}}
}
public void paintComponent(Graphics g) {
Font r = new Font("SansSerif", Font.BOLD, 16);
g.setFont(r);
if (size==4){
Graphics2D g2 = (Graphics2D)g;
super.paintComponent(g);
Point2D.Double point = new Point2D.Double(5,5);
// Ellipse2D.Double a= new Ellipse2D.Double(6, 6, 20, 20);
int x0=30;
int x1=150;
int y0=20;
int y1=150;
int x[]={x0,x1,x0,x1};
int y[]={y0,y1,y0,y1};
ArrayList<Ellipse2D.Double> vert = new ArrayList<Ellipse2D.Double>();
Ellipse2D.Double a= new Ellipse2D.Double(x0+5, y0, 15, 15);
Ellipse2D.Double b= new Ellipse2D.Double(x0+5, y1, 15, 15);
Ellipse2D.Double c= new Ellipse2D.Double(x1+5, y0, 15, 15);
Ellipse2D.Double d= new Ellipse2D.Double(x1+5, y1, 15, 15);
vert.add(a);
vert.add(b);
vert.add(c);
vert.add(d);
//g.drawLine((int)a.getX(), (int)a.getY(),(int) b.getX(),(int) b.getY());
//for(int f=0;f<4;f++)
g.drawString(" A ",x0+15,y0);
g.drawString(" B ",x0+15,y1);
g.drawString(" C ",x1,y0);
g.drawString(" D ",x1+5,y1);
vert.add(a);
vert.add(b);
vert.add(c);
vert.add(d);
g2.fill(new Ellipse2D.Double(x0, y0, 15, 15));
g2.fill(new Ellipse2D.Double(x0, y1, 15, 15));
g2.fill(new Ellipse2D.Double(x1, y0, 15, 15));
g2.fill(new Ellipse2D.Double(x1, y1, 15, 15));
for(int i=0;i<4;i++){
for (int j=0;j<4;j++){
if (arr[j]!=0&&arr[j]!=-1)
g.drawLine((int)vert.get(i).getX(), (int)vert.get(i).getY(),(int)vert.get(j).getX(),(int)vert.get(j).getY());
}
}
}
}
}هل السبب انه يتم استدعاء ميثود paint تلقائيا