shuriken
شنبه 25 دی 1389, 09:08 صبح
سلام
از اونجایی که خودم کلی سایت رو برای پیدا کردن همچین چیزی گشتم
ولی تو هیچ کدوم چیزی جز کامپوننت و کلاس ندیدم
خودم نوشتمش و از اونجایی که دوس دارم همه کسایی که این مشکل رو دارن مشکلشون حل بشه
و خودشون هم یاد بگیرن که چطور میشه اینجور ابزارارو در سطح پایین درست کرد تصمیم گرفتم این تاپیک
آموزشی رو درست کنم.
اول از همه باید بگم که تقریبا کل کارایی که میخواین درست و حسابی فارسی نویسی بشه و راست چین هم
باشه کلا باید با ابزارهای گرافیکی کار بشن و بهترین کنترلی که امکانات زیادی رو در اختیارتون قرار میده کنترلی هست باسم Canvas.
کد زیر رو خوب نگاه کنین تا حدودی توضیحات میدم ولی اگه بازم مشکلی بود بپرسین یا پیام خصوصی بدین :لبخند:
class ListCanvas extends Canvas {
String[] items = new String[]{"امتحان", "test", "تست", "تست2"};
int selected_index = 0;
int red_c = 255;
int green_c = 150;
int blue_c = 255;
public void paint(Graphics g) {
int string_height = g.getFont().getHeight();
int item_h = string_height + 3;
g.setColor(255, 255, 255);
g.fillRect(0, 0, getWidth(), getHeight());
for (int i = 0; i < items.length; ++i) {
if (i == selected_index) {
g.setColor(red_c, green_c, blue_c);
g.drawRoundRect(0, (i * (item_h + 2)), getWidth(), item_h, 15, 15);
g.setColor(0, 0, 0);
g.drawString(items[i], getWidth() - 3, (i * (item_h + 2)) + ((item_h / 2) - (string_height / 2)), g.TOP | g.RIGHT);
} else {
g.setColor(100, 100, 255);
g.fillRoundRect(0, (i * (item_h + 2)), getWidth(), item_h, 15, 15);
g.setColor(0, 0, 0);
g.drawString(items[i], getWidth() - 3, (i * (item_h + 2)) + ((item_h / 2) - (string_height / 2)), g.TOP | g.RIGHT);
}
}
}
protected void keyPressed(int keycode) {
int code = getGameAction(keycode);
switch (code) {
case UP:
if (selected_index > 0) {
selected_index--;
} else {
selected_index = items.length - 1;
}
break;
case DOWN:
selected_index++;
selected_index %= items.length;
break;
default:
switch (keycode) {
case KEY_NUM2:
if (selected_index > 0) {
selected_index--;
} else {
selected_index = items.length - 1;
}
break;
case KEY_NUM8:
selected_index++;
selected_index %= items.length;
break;
}
}
repaint();
}
}
آرایه String ای که تعریف کردم در واقع برای نگه داشتن element های لیستمون هست
البته همونطور که قبلا هم گفتم این یک مثال خیلی سادست و برای پویا تر بودن لیستتون باید از
توابع Addelement و غیره تو کلاستون بهره ببرین که برای اینکار بهتره بجای آرایه از اشیایی مثل
java.util.Vector استفاده کنین که امکاناتش برای اینکار مناسبن.
در تابع paint همه ی عناصر آرایه پیمایش میشن و برای هرکدوم یک Image (که در واقع همون گزینه هایی هستند که قراره کاربر ببینه) ساخته میشه و بهشون مختصات دقیق داده میشه.
در مورد تابع DrawString از اونجایی که گزینه آخرش رو به g.Right ست میکنیم از سمت چپ صفحه شروع میکنه به چاپ کردن اون ما باید نقطه x شروع چاپ رو به getwidth ست کنیم که نوشته درست بیافته سمت راست صفحمون.
در این تابع (paint) هربار چک میشه که کدوم آیتم انتخاب شده تا شکل اون با بقیه فرق بکنه.
در تابع keypress که در واقع یک تابع overload شده هست دکمه هایی رو که کاربر فشار میده handle میشه و با توجه به اون گزینه انتخابیمون تغییر میکنه.
و در انتها تابع repaint که یک تابع سیستمی هست صدا زده میشه تا کل صفحمون دوباره ترسیم بشه
و با توجه به تغییراتی که در selectedindex دادیم گزینه ی متفاوتی از قبل دارای طرح متفاوت میشه که در این
حالت در نظر کاربر اینطور دیده میشه که گزینه دیگه ای انتخاب شده.
موفق باشین
از اونجایی که خودم کلی سایت رو برای پیدا کردن همچین چیزی گشتم
ولی تو هیچ کدوم چیزی جز کامپوننت و کلاس ندیدم
خودم نوشتمش و از اونجایی که دوس دارم همه کسایی که این مشکل رو دارن مشکلشون حل بشه
و خودشون هم یاد بگیرن که چطور میشه اینجور ابزارارو در سطح پایین درست کرد تصمیم گرفتم این تاپیک
آموزشی رو درست کنم.
اول از همه باید بگم که تقریبا کل کارایی که میخواین درست و حسابی فارسی نویسی بشه و راست چین هم
باشه کلا باید با ابزارهای گرافیکی کار بشن و بهترین کنترلی که امکانات زیادی رو در اختیارتون قرار میده کنترلی هست باسم Canvas.
کد زیر رو خوب نگاه کنین تا حدودی توضیحات میدم ولی اگه بازم مشکلی بود بپرسین یا پیام خصوصی بدین :لبخند:
class ListCanvas extends Canvas {
String[] items = new String[]{"امتحان", "test", "تست", "تست2"};
int selected_index = 0;
int red_c = 255;
int green_c = 150;
int blue_c = 255;
public void paint(Graphics g) {
int string_height = g.getFont().getHeight();
int item_h = string_height + 3;
g.setColor(255, 255, 255);
g.fillRect(0, 0, getWidth(), getHeight());
for (int i = 0; i < items.length; ++i) {
if (i == selected_index) {
g.setColor(red_c, green_c, blue_c);
g.drawRoundRect(0, (i * (item_h + 2)), getWidth(), item_h, 15, 15);
g.setColor(0, 0, 0);
g.drawString(items[i], getWidth() - 3, (i * (item_h + 2)) + ((item_h / 2) - (string_height / 2)), g.TOP | g.RIGHT);
} else {
g.setColor(100, 100, 255);
g.fillRoundRect(0, (i * (item_h + 2)), getWidth(), item_h, 15, 15);
g.setColor(0, 0, 0);
g.drawString(items[i], getWidth() - 3, (i * (item_h + 2)) + ((item_h / 2) - (string_height / 2)), g.TOP | g.RIGHT);
}
}
}
protected void keyPressed(int keycode) {
int code = getGameAction(keycode);
switch (code) {
case UP:
if (selected_index > 0) {
selected_index--;
} else {
selected_index = items.length - 1;
}
break;
case DOWN:
selected_index++;
selected_index %= items.length;
break;
default:
switch (keycode) {
case KEY_NUM2:
if (selected_index > 0) {
selected_index--;
} else {
selected_index = items.length - 1;
}
break;
case KEY_NUM8:
selected_index++;
selected_index %= items.length;
break;
}
}
repaint();
}
}
آرایه String ای که تعریف کردم در واقع برای نگه داشتن element های لیستمون هست
البته همونطور که قبلا هم گفتم این یک مثال خیلی سادست و برای پویا تر بودن لیستتون باید از
توابع Addelement و غیره تو کلاستون بهره ببرین که برای اینکار بهتره بجای آرایه از اشیایی مثل
java.util.Vector استفاده کنین که امکاناتش برای اینکار مناسبن.
در تابع paint همه ی عناصر آرایه پیمایش میشن و برای هرکدوم یک Image (که در واقع همون گزینه هایی هستند که قراره کاربر ببینه) ساخته میشه و بهشون مختصات دقیق داده میشه.
در مورد تابع DrawString از اونجایی که گزینه آخرش رو به g.Right ست میکنیم از سمت چپ صفحه شروع میکنه به چاپ کردن اون ما باید نقطه x شروع چاپ رو به getwidth ست کنیم که نوشته درست بیافته سمت راست صفحمون.
در این تابع (paint) هربار چک میشه که کدوم آیتم انتخاب شده تا شکل اون با بقیه فرق بکنه.
در تابع keypress که در واقع یک تابع overload شده هست دکمه هایی رو که کاربر فشار میده handle میشه و با توجه به اون گزینه انتخابیمون تغییر میکنه.
و در انتها تابع repaint که یک تابع سیستمی هست صدا زده میشه تا کل صفحمون دوباره ترسیم بشه
و با توجه به تغییراتی که در selectedindex دادیم گزینه ی متفاوتی از قبل دارای طرح متفاوت میشه که در این
حالت در نظر کاربر اینطور دیده میشه که گزینه دیگه ای انتخاب شده.
موفق باشین