PDA

View Full Version : jradioButton



yegane8
دوشنبه 12 تیر 1391, 14:33 عصر
سلام
من باید چی کار کنم که توی یه برنامه وقتی فرم مربوط باز میشه و مثلا توش 10 سوال 4 گزینه ای است کاربر با زدن یک گزینه دیگه نتونه گزینه ی دیگری رو بزنه و در واقع با زدن یکی از radioButton یا یکی از checkBox ها 3 تای دیگر غیرفعال شوند

yegane8
دوشنبه 12 تیر 1391, 15:34 عصر
البته می‌دانم که ۴ تا ۴ تا این radioButton‌ها را در یک button Group باید add کنم اما در نتبینز در jfram نمیدونم کجا باید این کار را انجام دهم
من در یکی از actionListener ها این کار را انجام دادم ولی به نظرم معقول نیست(البته درست اجرا شد)

yegane8
دوشنبه 12 تیر 1391, 17:14 عصر
در اخر من باید چطوری اخرین radioButton فشرده شده رو save کنم چون ممکنه که کاربر انتخاب خودش رو عوض کنه
یه سوال دیگه : من حداقل باید 40 بار radioButton و حداقل 10 تا Group button درست کنم تازه این فقط مال 1 کلاس و این مشکل تو کلاس های دیگه هم وجود دارد چطوری میشه این مشکل رو حل کرد؟

spiderman200700
دوشنبه 12 تیر 1391, 17:18 عصر
یه مثال برای این کار:
import java.awt.FlowLayout;
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JRadioButton;

public class SwingRadioButton {

private ButtonGroup bg = new ButtonGroup();
private JRadioButton rb1 = new JRadioButton("one", false),
rb2 = new JRadioButton("two", false), rb3 = new JRadioButton(
"three", false);

public SwingRadioButton() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS E);
frame.setLayout(new FlowLayout());
frame.setSize(200, 300);
bg.add(rb1);
bg.add(rb2);
bg.add(rb3);
frame.add(rb1);
frame.add(rb2);
frame.add(rb3);
frame.setVisible(true);
}

public static void main(String args[]) {
new SwingRadioButton();
}
}

spiderman200700
دوشنبه 12 تیر 1391, 17:22 عصر
در اخر من باید چطوری اخرین radioButton فشرده شده رو save کنم چون ممکنه که کاربر انتخاب خودش رو عوض کنه
یه سوال دیگه : من حداقل باید 40 بار radioButton و حداقل 10 تا Group button درست کنم تازه این فقط مال 1 کلاس و این مشکل تو کلاس های دیگه هم وجود دارد چطوری میشه این مشکل رو حل کرد؟

منظورتونو اصلا نمیفهمم.
save؟
سوال دو هم بیشتر توضیح بدید

yegane8
دوشنبه 12 تیر 1391, 17:54 عصر
منظورتونو اصلا نمیفهمم.
save؟
مثلا کاربر از 10 تا تست به 8 تا پاسخ صحیح میدهد در اخر هم یک button داریم برای check answer
که مثلا نشان می دهد کاربر چند درصد پاسخ صحیح داده و و به چه سوالاتی اشتباه پاسخ داده این گزینه های وارد شده باید به نحوی save شوند:متفکر:
ُstring saveAnswer = evt.getActionCammand())
درسته؟

سوال دو هم بیشتر توضیح بدید
منظورم اینکه میشه یه superClass درست کرد تا اینقدر کد تکراری نداشنه باشم اگه میشه چطوری چون اسم همه RadioButton ها باید با هم فرق کند
ممنون

yegane8
سه شنبه 13 تیر 1391, 12:19 عصر
اگه باید بیشتر توضیح بدم لطفا بفرمایید

spiderman200700
چهارشنبه 14 تیر 1391, 00:09 صبح
با این کد 40 تا JRadioButton که هر 4تاش توی یه ButtonGroup قرار داره ساخته و نمایش داده میشه.


import java.awt.Dimension;
import java.awt.FlowLayout;
import java.util.ArrayList;
import javax.swing.*;

public class SwingRadioButton extends JFrame {

public SwingRadioButton() {
super("SwingRadioButton");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new FlowLayout());
setSize(350, 560);
setResizable(false);

ArrayList<ButtonGroup> buttonGroupsList = new ArrayList<ButtonGroup>();
for (int i = 0; i < 10; i++) {
ButtonGroup buttonGroup = new ButtonGroup();
for (int j = 0; j < 4; j++) {
JRadioButton rb = new JRadioButton("Word" + i + "-" + j);
buttonGroup.add(rb);
add(rb);
}
buttonGroupsList.add(buttonGroup);
JSeparator jSeparator = new JSeparator();
jSeparator.setPreferredSize(new Dimension(400, 20));
add(jSeparator);
}
setVisible(true);
}

public static void main(String args[]) {
new SwingRadioButton();
}
}


میتونی از buttonGroupsList بعدا برای دسترسی به همه ی JRadioButtonها استفاده کنی.

spiderman200700
چهارشنبه 14 تیر 1391, 00:10 صبح
برای ذخیره هم باید کاربر انتخاب هاشو بکنه بعد در آخر وقتی دکمه ی check answer رو زد ، بیای ببینی توی هر ButtonGroup کدوم دکمه انتخاب شده و اونو save کنی.

yegane8
چهارشنبه 14 تیر 1391, 11:41 صبح
با این کد 40 تا JRadioButton که هر 4تاش توی یه ButtonGroup قرار داره ساخته و نمایش داده میشه.


import java.awt.Dimension;
import java.awt.FlowLayout;
import java.util.ArrayList;
import javax.swing.*;

public class SwingRadioButton extends JFrame {

public SwingRadioButton() {
super("SwingRadioButton");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new FlowLayout());
setSize(350, 560);
setResizable(false);

ArrayList<ButtonGroup> buttonGroupsList = new ArrayList<ButtonGroup>();
for (int i = 0; i < 10; i++) {
ButtonGroup buttonGroup = new ButtonGroup();
for (int j = 0; j < 4; j++) {
JRadioButton rb = new JRadioButton("Word" + i + "-" + j);
buttonGroup.add(rb);
add(rb);
}
buttonGroupsList.add(buttonGroup);
JSeparator jSeparator = new JSeparator();
jSeparator.setPreferredSize(new Dimension(400, 20));
add(jSeparator);
}
setVisible(true);
}

public static void main(String args[]) {
new SwingRadioButton();
}
}


میتونی از buttonGroupsList بعدا برای دسترسی به همه ی JRadioButtonها استفاده کنی.

سلام
من این کد رو امتحان کردم در خط public class SwingRadioButton extends JFrame {
error میده :

Caused by: java.lang.RuntimeException: Uncompilable source code - class SwingRadioButton is public, should be declared in a file named SwingRadioButton.java
at SwingRadioButton.SwingRadioButton.<clinit>(
و به public رو به protected تغییر دادم compileError نداشت اما runهم نشد

Caused by: java.lang.RuntimeException: Uncompilable source code - modifier protected not allowed here
at SwingRadioButton.SwingRadioButton.<clinit>(NewClass.java:8)
Exception in thread "main" Java Result: 1

من درست نفهمیدم این کلاس swingRadioButton یه supper class هست که بقیه کلاس هایی که به این buuton ها نیاز دارند ازش به ارث می برند؟ اگه ایطوریه این چیه super("SwingRadioButton");
مگه این رو نباید تو کلاس هایی بنویسیم که از swingRadioButton به ارث می برند؟
با تشکر

spiderman200700
چهارشنبه 14 تیر 1391, 13:56 عصر
برای رفع این مشکل یه Java Class خالی با اسم SwingRadioButton بسازید، بعدش کدهایی رو که واستون گذاشتم توش کپی کنید. (اگه چیزی توش نوشته شده بود همه رو پاک کنید، بعدش این کد ها رو توش کپی کنید)

ما توی این خط public class SwingRadioButton extends JFrame اومدیم یه کلاس به اسم SwingRadioButton ساختیم که از کلاس JFrame ارث بری میکنه.
با این کار دیگه لازم نیست از JFrame شی بسازی.

super("SwingRadioButton"); هم برای صدا زدن کانستراکتور super class نوشتیم. با این کار title برنامه به SwingRadioButton تغییر میکنه.