الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ازاى اخلى JDialog يعمل Flash او اهتزار عن الضغط خارجه

بدأه Mogaahed في 13 أبريل 2012 · 3 رد · 703 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته ...

عندى استفسار فى واجهات المستخدم GUI , لو عندى JFrame عن الضغط على زر ما فيه يظهر JDialog , سؤالى هنا لو عايز اخلى الــJDialog ده يعمل فلاش او اهتزاز لما اضغط على الفريم , ازاااااااااى ؟؟؟؟؟؟؟

ده الكود اللى انا عملته :

 
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Mogahed
 */
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Main extends JFrame implements ActionListener ,WindowFocusListener{
    // VARIABLES
    JDialog d = new JDialog();
    Main(){
        super("Test Mouse Listening with windowfocus");
        setDefaultCloseOperation(3);
        setSize(600,600);
        JPanel mainP = new JPanel();
        JButton click = new JButton("Click");        
        mainP.setLayout(new FlowLayout());        
        click.addActionListener(this);               ;
        mainP.add(click);        
        add(mainP);        
        setVisible(true);
        }
    // ENENT HANDLING
    public void actionPerformed(ActionEvent e){
    getD();
    setEnabled(false);
    }
    public void windowGainedFocus(WindowEvent e){        
        if(e.getSource()==d){
            System.out.println("Window Gained focus..");
            }
         }
    public void windowLostFocus(WindowEvent e){   
        System.out.println("Window Gained focus..");
        // What Should Happen There tp Flash this Dialog ?
        }
    // METHODS
    JDialog getD(){
        d = new JDialog();
        // Adjust d
        d.setTitle("Dialog..> Focus is Heeere");
        d.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
        d.setSize(400,150);
        d.setLocation(100,250);
        d.setVisible(true);
        d.setFocusable(true);
        d.addWindowFocusListener(this);
        d.addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent e){
                setEnabled(true);
            }
        });
        return d;
        }
    public static void main(String[] args) {
        Main flashingWindow =new Main();
    }

}

كل اللى ان عايزه ان الـJDialog بتاعى يعمل فلاش لو اليوزر حاول يستخدم الــJFrame ,, زى مثلا الـ MessageDialog اللى فى الــ JOtionPane بالظبط ...

وشكرا . :)

#2

السلام عليكم

خذ هذا الكلاس MsgDialog والذي يعمل ارتجاج عند ظهوره

import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.Timer;

public class MsgDialog extends Object{


    private JDialog dialog;
    private Point naturalLocation;
    private long startTime;
    private Timer shakeTimer;
    private final double TWO_PI = Math.PI * 2.0;

    public MsgDialog() {

    }

    public void showVerbDialog(String msg,String title){
        JOptionPane pane = new JOptionPane (msg,JOptionPane.ERROR_MESSAGE, JOptionPane.CLOSED_OPTION);
        dialog = pane.createDialog(null,title);
        dialog.setModal(false);
        dialog.setVisible(true);
        startShake(10,50,1000,5);
    }

   public void showVerbDialog(String msg,String title, int DISTANCE , double CYCLE){
        JOptionPane pane = new JOptionPane (msg,JOptionPane.ERROR_MESSAGE, JOptionPane.CLOSED_OPTION);
        dialog = pane.createDialog(null,title);
        dialog.setModal(false);
        dialog.setVisible(true);
        startShake(DISTANCE ,CYCLE,1000,5);
    }

    public void showVerbDialog(String msg,String title, int DISTANCE , double CYCLE, int TimeDuration,int DelayTime){
        JOptionPane pane = new JOptionPane (msg,JOptionPane.ERROR_MESSAGE, JOptionPane.CLOSED_OPTION);
        dialog = pane.createDialog(null,title);
        dialog.setModal(false);
        dialog.setVisible(true);
        startShake(DISTANCE ,CYCLE,TimeDuration,DelayTime);
    }



    private  void startShake(final int SHAKE_DISTANCE ,final double SHAKE_CYCLE,final int SHAKE_DURATION,int SHAKE_UPDATE) {
        naturalLocation = dialog.getLocation();
        startTime = System.currentTimeMillis();
        shakeTimer = new Timer(SHAKE_UPDATE,
                new ActionListener( ) {
    @Override
            public void actionPerformed (ActionEvent e) { 
                // calculate elapsed time               
                long elapsed = System.currentTimeMillis()-
                  startTime; 
                // use sin to calculate an x-offset 
                double waveOffset = (elapsed % SHAKE_CYCLE) /
                    SHAKE_CYCLE; 
                double angle = waveOffset * TWO_PI;


                // offset the x-location by an amount 
                // proportional to the sine, up to 
                // shake_distance 
                int shakenX = (int) ((Math.sin (angle) *
                                      SHAKE_DISTANCE) +
                                     naturalLocation.x); 

                dialog.setLocation (shakenX, naturalLocation.y);               
                dialog.repaint( );


                // should we stop timer? 
                if (elapsed >= SHAKE_DURATION)
                 stopShake();
            }
        }
       );
       shakeTimer.start( );


}


private  void stopShake( ) {
    shakeTimer.stop( );
    dialog.setLocation (naturalLocation);
    dialog.repaint( );
}



}

وطريقة استدعاه

MsgDialog msgDialog=new MsgDialog();
   msgDialog.showVerbDialog("اهلا  باجمل منتدى....تحياتي","الفريق العربي للبرمجة");

سلامي للجميع

1
#3

مشكور جدا استاذ alionline على الرد والكود الجميل بتاعك ,,, لكن ليس هذا ما اريده :(

لو حضرتك اطلعت ع الكود اللى انا عامله كنت ممكن تفهم قصدى , واعتقد واضح من عنوان الموضوع ,,,

المهم انا عايز لما اظهر كائن من الـJDialog يحصل حاجتين :

اولا: الـJFrame يصبح غير متاح ... ودى انا عرفت اعملها

    setEnabled(false);

غير كده اليوزر لو حاول يتجاهل الـJDialog اللى ظهر ,, الـJDialog يهتز والبرنامج يعطى جرس او رنه علشان ينبه اليوزر ..

مش عارف الموضوع صعب ولا ايه ,, بس انا بشوف الحوار ده فى اى برنامج

يا ريت لو حد عارف دى ممكن تتعمل ازاى يقول ,, وجزاكم الله خيرا :)

#4

بإمكانك إصدار صوت تنبيه من خلال الأمر :

Toolkit tk = Toolkit.getDefaultToolkit();
    tk.beep();

أيضا اطلع على الرابط :

http://www.java2s.com/Code/Java/Swing-Components/Shakeadialog.htm

تحياتي

تم تعديل هذه المشاركة بواسطة JavaPorgrammer في 15 أبريل 2012 في 07:29

1

عفواً أحبتي انقطاعي بسبب الدراسة دعواتكم بالتوفيق..

{ لا ينال العلم مستحٍ ولا مستكبر }

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…