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

مشكلة فى عمل Buttons

بدأه mr.beshoy في 24 ديسمبر 2010 · 8 رد · 642 مشاهدة · في JavaME
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

هذه اول بداية لى مع ال J2ME

----------------------------------------------

من المعروف فى ال J2SE عندما نريد عمل زرار نستعمل ال Class JButton

و إذا اردنا عمل Panel لنضع عليها الزراير نستعمل ال JPanel و هناك ال LayoutManager

اما الوضع فى الME غريب شوية

انا بعمل برنامج الة حاسبة لإستكشاف الامر ( عملت 9 زراير و ظهروا فعلاً لكن ليس بشكل الزرار المعتاد كمافى ال SE ) هل هناك طريقة ؟!

و عملت commanlistener على كل زرار بحيث اول ما أضغط على الزر يتعرض قيمته فى textfield لكن بردو مش شغال .

import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Item;
import javax.microedition.lcdui.StringItem;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.*;

public class HelloME extends MIDlet {

    private Form form = null;
    private Display display = null;
    private TextField textField = null;
    private String[] str = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};
    private StringItem[] buttons;
    private MyCommandListener myCommandListener;

    public HelloME() {
        myCommandListener = new MyCommandListener();
        display = Display.getDisplay(this);
        form = new Form("Hello JME");
        createCalcGUI();
    }

    private void createCalcGUI() {
        textField = new TextField(null, null, 30, TextField.ANY);
        form.append(textField);
        /////////////////////////////////////////
        buttons = new StringItem[str.length];
        for (int i = 0; i < str.length; i++) {
            buttons = new StringItem("", str, Item.HYPERLINK);
            form.append(buttons);
        }
    }

    public void startApp() {
        display.setCurrent(form);


    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
    }

    private class MyCommandListener implements CommandListener {

        public void commandAction(Command c, Displayable d) {
            if (c.getLabel().equals(buttons[0].getText())) {
                textField.setString(buttons[0].getText());
            } else if (c.getLabel().equals(buttons[1].getText())) {
                textField.setString(buttons[1].getText());
            } else if (c.getLabel().equals(buttons[2].getText())) {
                textField.setString(buttons[2].getText());
            }
        }
    }
}

اعذرونى لو الإسئلة مش و لابد دى أول مرة أكتب فيها JME .

شكراً

#2

الوضع مش غريب ولا حاجه

لكن علشان تستخدم حاجات زى Button , Label , Panel , ComboBox , .....

هتحتاج تستخدم مكتبه اسمها

LWUIT

من شركه Sun بردوا

لكنها خاصه اوووى بالجرافيكس والديزين بتاع الـ Mobile

هو دا الحل :)

Software Developer
Mahmoudkelany.com


 

#3

مش دا الشكل اللى انت عاوزه ؟

post-217802-015671300 1293178236_thumb.p

طبعا مع تغيير الالوان والخليفه والصور وكل هذا

دا الكود لو عاوزه

اقبى اعمل اوامر الـoperations بقا blink.gif

بس لازم يكون عندك المكتبه LWUIT

هارفقها ليك بالمره laugh.gif

LWUIT.zip

import com.sun.lwuit.*;
import com.sun.lwuit.events.*;
import com.sun.lwuit.layouts.*;
import javax.microedition.midlet.*;

/**
 * @author Mahmoud Kelany
 */
public class CalcGUIMidlet extends MIDlet {

	private Form calcForm;
	private TextField calcTextField;
	private Container calcButtonPanel;
	private Container calcOpertaionPanel;
	private Container calcFormPanel;
	private Button exitButton;
	private ButtonActionListener buttonListener;
	private String opStrings[] = {"+", "-", "/", "*", ".", "="};

	public void startApp() {
    	Display.init(this);
    	calcForm = new Form("Calclator");
    	calcTextField = new TextField();
    	buttonListener = new ButtonActionListener();
    	///////////////////////////////////
    	creatCalcNumberPanel();
    	///////////////////////////////////
    	creatCalcOperationPanel();
    	///////////////////////////////////
    	initComponts();
    	///////////////////////////////////
    	calcForm.setLayout(new BorderLayout());
    	calcForm.addComponent(BorderLayout.NORTH, calcFormPanel);
    	exitButton = new Button(new Command("Exit"));
    	exitButton.addActionListener(buttonListener);
    	calcForm.addComponent(BorderLayout.SOUTH, exitButton);
    	calcForm.getStyle().setBgColor(0xE0FAF4);
    	calcForm.show();
	}

	public void pauseApp() {
	}

	public void destroyApp(boolean unconditional) {
	}

	private void initComponts() {
    	calcFormPanel = new Container(new BorderLayout());
    	calcFormPanel.addComponent(BorderLayout.NORTH, calcTextField);
    	calcFormPanel.addComponent(BorderLayout.CENTER, calcButtonPanel);
    	calcFormPanel.addComponent(BorderLayout.SOUTH, calcOpertaionPanel);
	}

	private void creatCalcOperationPanel() {
    	calcOpertaionPanel = new Container(new GridLayout(2, 3));
    	Button opButtons[] = new Button[opStrings.length];
    	for (int i = 0; i < opButtons.length; i++) {
        	opButtons = new Button(" " + opStrings + " ");
        	opButtons.addActionListener(new OperationActionListener());
        	calcOpertaionPanel.addComponent(opButtons);
    	}
	}

	private void creatCalcNumberPanel() {
    	calcButtonPanel = new Container(new GridLayout(3, 3));
    	Button calcButtons[] = new Button[9];
    	for (int i = 0; i < calcButtons.length; i++) {
        	calcButtons = new Button(" " + (i + 1) + " ");
        	calcButtons.addActionListener(buttonListener);
        	calcButtonPanel.addComponent(calcButtons);
    	}
	}

	private class ButtonActionListener implements ActionListener {

    	public void actionPerformed(ActionEvent evt) {
        	if (evt.getCommand() == exitButton.getCommand()) {
            	destroyApp(true);
            	notifyDestroyed();
        	} else {
            	String calcText = calcTextField.getText().trim();
            	String buttonText = ((Button) evt.getSource()).getText().trim();
            	calcTextField.setText(calcText + buttonText);
        	}
    	}
	}

	private class OperationActionListener implements ActionListener {

    	private double firstNum = 0;
    	private double secondNum = 0;

    	public void actionPerformed(ActionEvent evt) {
        	try {
            	String btn = ((Button) evt.getSource()).getText().trim();
            	String txt = calcTextField.getText().trim();
        	} catch (Exception e) {
        	}
    	}
	}
}
المرفقات
MobileCAclc.png

تم تعديل هذه المشاركة بواسطة Mahmoud Kelany في 24 ديسمبر 2010 في 11:11

1

Software Developer
Mahmoudkelany.com


 

#4

شكراً لردك .

مع المكتبة دى كإنك بتتعامل مع ال swing

--------------------------------------------------------

طب ال StringItem و تمرر ليه Item.Button

مش هتنفع ليه ؟!!!

شكراً على تعبك .

#5
mr.beshoy كتب:

شكراً لردك .

مع المكتبة دى كإنك بتتعامل مع ال swing

--------------------------------------------------------

طب ال StringItem و تمرر ليه Item.Button

مش هتنفع ليه ؟!!!

شكراً على تعبك .

ممكن تعمل, لكنك لن تستطيع عمل ال layout الذي قام به محمود.

#6

@ الأخ مهدى حجازى

يعنى إذن الحل الإمثل لعمل GUI على الموبيل هو استعمال LWUIT ؟؟؟؟

-----------------------------------------------------------------------------------------------------

مش طريقة كتابة عمل زرار من خلال ال StringItem كالتالى ؟؟ :

StringItem item=new StringItem("","",Item.Button);

أول param نمرره عبارة عن String و كما قرات بيكون Item labell

ثانى param نمرره عبارة عن String و بيكون the text contents

ثالث param نمرره بيكون نوع الItem الذى نريده .

ايه الفرق بين ال string الاول و الثانى ؟

أنا جربت تركت الاول فاضى و كتبت فى الثانى فا ظهر النص الى عاوزه و لكن ليس كشكل زرار . كان عبارة عن text و خلاص .

معلش اسئلتى مش و لابد قوى

شكراً

------------------------------------------------

تم تعديل هذه المشاركة بواسطة mr.beshoy في 24 ديسمبر 2010 في 14:07

#7
mr.beshoy كتب:

@ الأخ مهدى حجازى

يعنى إذن الحل الإمثل لعمل GUI على الموبيل هو استعمال LWUIT ؟؟؟؟

-----------------------------------------------------------------------------------------------------

مش طريقة كتابة عمل زرار من خلال ال StringItem كالتالى ؟؟ :

StringItem item=new StringItem("","",Item.Button);

أول param نمرره عبارة عن String و كما قرات بيكون Item labell

ثانى param نمرره عبارة عن String و بيكون the text contents

ثالث param نمرره بيكون نوع الItem الذى نريده .

ايه الفرق بين ال string الاول و الثانى ؟

أنا جربت تركت الاول فاضى و كتبت فى الثانى فا ظهر النص الى عاوزه و لكن ليس كشكل زرار . كان عبارة عن text و خلاص .

معلش اسئلتى مش و لابد قوى

شكراً

------------------------------------------------

مثلما انت ذكرت، معظم الجوالات ترسم ال Label بطريقه مختلفه عن ال Text في ال String Item للتميز بينهم في حاله الزر أظن واحد منهم يرسم داخل الزر والأخر يكون خارجه لذلك أظن أنك يجب ان تمرر أحدهما فقط. بصراحه لست أذكر بشكل جيد..من زمان ما اشتغلت lcdui

#8

شكراً .

يعنى تنصحوا باستعمال ال LWUIT لعمل GUI ??

و لا ايه ؟

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