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

نافذة بشريط عنوان مختلف

بدأه علاء الصالحي في 28 ديسمبر 2009 · 10 رد · 573 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

هل يمكننا عمل موضوع التحريك بدون الحاجة إلى top bar

بالطبع يمكننا تحتاج إلى mouseEvents

هكذا يوجد مفر لكنه مفر صعب بعض الشيء :)

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#2

هههههههههههه

فعلا كنت أفكر بذلك ،، لأني تعالت مع برامج بالشكل دا

منها الـ 4Shared Desktop

اعتقد ليست بتلك الصعوبه ،، باستخدام الـ mouse dragged , mouse dropped

وبعد ذلك أقوم بحساب الاحداثيات الجديده للماوس واقوم برسم الفريم مرة اخري في الاحداثيات الجديده

ربما اثناء التجربه يتضح الأمر ان كان صعب أم لا :D

شكراً لك أستاذ علاء :)

صــفــر

#3

اعملتها و زبطت :)

package javaapplication3;

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.JFrame;

/**
 *
 * @author mersan
 */
public class MainFrame extends JFrame implements MouseListener, MouseMotionListener {

    static MainFrame mainFrame;
    static boolean isLMBDown;
    int xDiff = 0, yDiff = 0;

    public static void main(String[] args) {
        // TODO code application logic here

        mainFrame = new MainFrame();
        mainFrame.initFrame();



    }

    private void initFrame() {
        mainFrame.setUndecorated(true);
        mainFrame.setSize(500, 500);
        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        mainFrame.setVisible(true);
        mainFrame.addMouseListener(this);
        mainFrame.addMouseMotionListener(this);
        System.out.println(mainFrame.getLocationOnScreen());
    }

    public void mouseClicked(MouseEvent e) {
    }

    public void mousePressed(MouseEvent e) {
        xDiff = (int) (e.getXOnScreen() - (mainFrame.getLocationOnScreen().getX()));
        yDiff = (int) (e.getYOnScreen() - (mainFrame.getLocationOnScreen().getY()));
        isLMBDown = true;
    }

    public void mouseReleased(MouseEvent e) {
        isLMBDown = false;
    }

    public void mouseEntered(MouseEvent e) {
    }

    public void mouseExited(MouseEvent e) {
    }

    public void mouseDragged(MouseEvent e) {
        if (isLMBDown) {
            mainFrame.setLocation(e.getXOnScreen() - xDiff, e.getYOnScreen() - yDiff);
        }
    }

    public void mouseMoved(MouseEvent e) {
    }
}
1
#4

جميل جداً جداً

وكمان رافعها على youtube :)

يعطيك العافية

أظنني أفضلها حتى على النوافذ العادية

لكن هل تؤثر هكذا على الحدث mouse event داخل النافذة؟

أم أن الأحداث داخل المكونات تلغي بعضها البعض بالأولوية

تحياتي

1
حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#5

يمكن اضافة هذا الحدث لاي كائن مثلا استبدل initFrame Method بالتالي :

private void initFrame() {

        JLabel label = new JLabel("Drag Me");
        label.setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY, 2));
        label.addMouseListener(this);
        label.addMouseMotionListener(this);

        mainFrame.setLayout(new BorderLayout());
        mainFrame.add(label, BorderLayout.NORTH);

        mainFrame.setUndecorated(true);
        mainFrame.setSize(500, 500);
        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        mainFrame.setVisible(true);
       System.out.println(mainFrame.getLocationOnScreen());

    }

والان اضغط على ال Label (Drag Me) و حرك الفريم من خلالها :)

تم تعديل هذه المشاركة بواسطة Mohammed Mshari Ersan في 30 ديسمبر 2009 في 18:52

#6

لا لا يا محمد قصدت هل لو كان كان كل الframe عبارة عن panel

هل تستطيع القيام بالتحريك أيضاً

تحياتي

1
حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#7
علاء الصالحي كتب:

لا لا يا محمد قصدت هل لو كان كان كل الframe عبارة عن panel

هل تستطيع القيام بالتحريك أيضاً

تحياتي

ارجو ان اكون فهمت سؤالك حبيبي و عزيزي علاء

و تبين هذا الحل

لكنها ضعيفة blink.gif

جربها عندك

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;

/**
 *
 * @author mersan
 */
public class MainFrame extends JFrame implements MouseListener, MouseMotionListener {

    static MainFrame mainFrame;
    static boolean isLMBDown;
    int xDiff = 0, yDiff = 0;
    private JPanel panel;

    public static void main(String[] args) {
        mainFrame = new MainFrame();
        mainFrame.initFrame();
    }

    private void initFrame() {

        mainFrame.setUndecorated(true);
        mainFrame.setSize(500, 500);
        mainFrame.setLocationRelativeTo(null);
        mainFrame.setVisible(true);

        panel = new JPanel();
        panel.setLayout(new BorderLayout());
        panel.setSize(100, 200);
        panel.setBorder(BorderFactory.createLineBorder(Color.RED, 2));
        panel.addMouseListener(this);
        panel.addMouseMotionListener(this);

        mainFrame.add(panel);


    }

    public void mouseClicked(MouseEvent e) {
    }

    public void mousePressed(MouseEvent e) {
        xDiff = (int) (e.getX() - (panel.getLocation().getX()));
        yDiff = (int) (e.getY() - (panel.getLocation().getY()));
        isLMBDown = true;
    }

    public void mouseReleased(MouseEvent e) {
        isLMBDown = false;
    }

    public void mouseEntered(MouseEvent e) {
    }

    public void mouseExited(MouseEvent e) {
    }

    public void mouseDragged(MouseEvent e) {
        if (isLMBDown) {
            panel.setLocation(e.getX() - xDiff, e.getY() - yDiff);
        }
    }

    public void mouseMoved(MouseEvent e) {
    }
}
#8

هذا ما قصدت يا محمد

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;

/**
 *
 * @author mersan
 */
public class TestJFrame extends JFrame implements MouseListener, MouseMotionListener {

    static boolean isLMBDown;
    int xDiff = 0, yDiff = 0;
    private JPanel panel;
    public TestJFrame() {
    	 initFrame();
	}
    public static void main(String[] args) {
    	new TestJFrame();
    }

    private void initFrame() {

        setUndecorated(true);
        setSize(500, 500);
        setLocationRelativeTo(null);
        setVisible(true);

        panel = new JPanel();
        panel.setLayout(new BorderLayout());
        panel.setSize(500, 20);
        panel.setBackground(Color.BLACK);
        panel.setOpaque(true);
        panel.addMouseListener(this);
        panel.addMouseMotionListener(this);

        getContentPane().add(panel);


    }

    public void mouseClicked(MouseEvent e) {
    }

    public void mousePressed(MouseEvent e) {
        xDiff = (int) (e.getXOnScreen() - (getLocationOnScreen().getX()));
        yDiff = (int) (e.getYOnScreen() - (getLocationOnScreen().getY()));
        isLMBDown = true;
    }

    public void mouseReleased(MouseEvent e) {
        isLMBDown = false;
    }

    public void mouseEntered(MouseEvent e) {
    }

    public void mouseExited(MouseEvent e) {
    }

    public void mouseDragged(MouseEvent e) {
        if (isLMBDown) {
            setLocation(e.getXOnScreen() - xDiff, e.getYOnScreen() - yDiff);
        }
    }

    public void mouseMoved(MouseEvent e) {
    }
}

بدلاً من التحريك في أي مكان في Frame يمكنك تخصيص منطقة معينة للتحريك فقط

فعلياً قمت بعمل شيء شبه Jframe العادي

لكن هذا يمكنك من بناء وجهات عربية مثلاً

كما يمكنك من تعديل الإطار على النحو الذي تريد

من الآخر يمكنك من بناء واجهات متميزة

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#9

اخي علاء

هل جربت الذي كتبته من قبل

اقتباس

يمكن اضافة هذا الحدث لاي كائن مثلا استبدل initFrame Method بالتالي :

private void initFrame() {

JLabel label = new JLabel("Drag Me");

label.setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY, 2));

label.addMouseListener(this);

label.addMouseMotionListener(this);

mainFrame.setLayout(new BorderLayout());

mainFrame.add(label, BorderLayout.NORTH);

mainFrame.setUndecorated(true);

mainFrame.setSize(500, 500);

mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

mainFrame.setVisible(true);

System.out.println(mainFrame.getLocationOnScreen());

}

والان اضغط على ال Label (Drag Me) و حرك الفريم من خلالها

#10

اعذرني يا محمد

لم أنتبه إلى هذه النقطة

بالمناسبة أفكر في فتح موضوع جديد فيه المحتوى الذي كتبناه أنا وأنت

(الذي كتبته أنت لأجل الدقة وساعدت أنا في تخريبه :lol: )

ما رأيك في عنوان مثل نافذة بشريط عنوان مختلف؟

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

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