نمایش نتایج 1 تا 2 از 2

نام تاپیک: ایجاد یک JPanel سفارشی برای ترسیم خطوط

  1. #1

    ایجاد یک JPanel سفارشی برای ترسیم خطوط

    سلام دوستان
    من یک کلاس که JPanel رو extends و KeyListener رو implements میکنه ساختم . حالا می خوام که به محض اجرای برنامه (در تابع main) در پانل , دو خط ( توسط DrawLine) ترسیم بشه . مشکل من اینه که تا الان هر کاری کردم دستور اعمال نمیشه . فقط در یک صورت ترسیم انجام شده , اونم به این صورت که در رویداد KeyTyped دستور DrawَAxis رو قرار بدم . ولی نمیتونم از داخل تابع main ترسیم رو انجام بدم . هر دو کلاس رو قرار میدم تا یه نگاهی بهش بندازید . (به تابع DrawAxis دقت کنید,خط 47 از کلاس Drawing و خط 11 از کلاس main ) . قصد من اینه که ترسیم خطوط رو از بیرون کلاس Drawing کنترل کنم . مثلا از داخل کلاس main . ولی در حال حاضر فقط از داخل کلاس Drawing می تونم خط رسم کنم ,ولی از بیرون کلاس Drawing خطی ترسیم نمیشه .
    ممنون

    کلاس Drawing

    import java.awt.Graphics;
    import java.awt.Point;
    import java.awt.event.KeyListener;
    import java.awt.event.KeyEvent;
    import javax.swing.JPanel;

    @SuppressWarnings("serial")
    public class Drawing extends JPanel implements KeyListener
    {
    private int width;
    private int height;

    public Drawing()
    {
    addKeyListener(this);
    }

    private void DrawLine(Point SP,Point EP){
    Graphics g=getGraphics();
    g.drawLine(SP.x, SP.y, EP.x, EP.y);
    g.dispose();
    }

    public void DrawAxis(){
    System.out.print("Axis is drawn ....");
    width=this.getWidth();
    height=this.getHeight();
    DrawLine(new Point(0,height/2),new Point(width,height/2));
    DrawLine(new Point(width/2,0),new Point(width/2,height));
    }

    @Override
    public void keyPressed(KeyEvent event) {
    // TODO Auto-generated method stub

    }

    @Override
    public void keyReleased(KeyEvent event) {
    // TODO Auto-generated method stub

    }

    @Override
    public void keyTyped(KeyEvent event) {
    //char c=event.getKeyChar();
    DrawAxis();
    }

    }



    اینم کلاس main :

    import javax.swing.JFrame;

    public class Example1
    {
    public static void main(String[] args) {
    JFrame jf=new JFrame();
    jf.setSize(500, 500);
    Drawing d=new Drawing();
    d.setFocusable(true);
    //***********************************
    d.DrawAxis();
    //***********************************
    jf.add(d);
    jf.setVisible(true);
    }
    }



  2. #2
    کاربر دائمی آواتار ahmad.mo74
    تاریخ عضویت
    مرداد 1393
    محل زندگی
    تهران
    پست
    437

    نقل قول: ایجاد یک JPanel سفارشی برای ترسیم خطوط

    سلام.

    نکته اینه که باید اینجا از متد paintComponent استفاده کنید.
    این متد هر وقت که قرار باشه تغییری توی کامپوننت بوجود بیاد و نیاز هست که آپدیت بشه (از جمله زمان ساخته شدنش)، صدا زده میشه.
    حالا اگر میخواید که تعییر دلخواهی توی ظاهر کامپوننتتون ایجاد کنید باید این متدو override کنید.

    پس کد این شکلی میشه :


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


    @SuppressWarnings("serial")
    public class Drawing extends JPanel implements KeyListener {


    private int width;
    private int height;


    public Drawing() {
    addKeyListener(this);
    }


    @Override
    protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    DrawAxis(g);
    g.dispose();
    }


    public void DrawAxis(Graphics g) {
    System.out.print("Axis is drawn ....");
    width = this.getWidth();
    height = this.getHeight();
    DrawLine(g, new Point(0, height / 2), new Point(width, height / 2));
    DrawLine(g, new Point(width / 2, 0), new Point(width / 2, height));
    }


    private void DrawLine(Graphics g, Point SP, Point EP) {
    g.drawLine(SP.x, SP.y, EP.x, EP.y);
    }


    @Override
    public void keyPressed(KeyEvent event) {
    // TODO Auto-generated method stub
    }


    @Override
    public void keyReleased(KeyEvent event) {
    // TODO Auto-generated method stub
    }


    @Override
    public void keyTyped(KeyEvent event) {
    // char c=event.getKeyChar();
    // DrawAxis();
    }


    public static void main(String[] args) {
    JFrame frame = new JFrame();


    frame.setPreferredSize(new Dimension(500, 500));
    frame.setDefaultCloseOperation(WindowConstants.EXI T_ON_CLOSE);


    frame.add(new Drawing());
    frame.pack();


    frame.setLocationRelativeTo(null);
    EventQueue.invokeLater(() -> frame.setVisible(true));
    }


    }

تاپیک های مشابه

  1. سوال: تبدیل هگزادسیمال به دسیمال با ساپورت 240 رقم
    نوشته شده توسط padidehteam1 در بخش برنامه نویسی در 6 VB
    پاسخ: 2
    آخرین پست: چهارشنبه 23 تیر 1389, 05:24 صبح
  2. مشخصات یک نقطه از jFrame یا jPanel
    نوشته شده توسط epm157 در بخش Java SE : نگارش استاندارد جاوا
    پاسخ: 1
    آخرین پست: جمعه 28 اسفند 1388, 20:16 عصر
  3. مبتدی: ماکسیمم ، ماکسیمم دو فیلد از دو تیبل متفاوت
    نوشته شده توسط Sal_64 در بخش SQL Server
    پاسخ: 8
    آخرین پست: دوشنبه 14 دی 1388, 10:16 صبح
  4. پاسخ: 3
    آخرین پست: جمعه 12 تیر 1388, 13:19 عصر
  5. فراخوانی یک jdialog از درون یک jpanel که خود jpanel هم درون یک jframe است
    نوشته شده توسط jeus در بخش Java SE : نگارش استاندارد جاوا
    پاسخ: 0
    آخرین پست: شنبه 08 تیر 1387, 10:09 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •