PDA

View Full Version : JRadioButton



yegane8
یک شنبه 01 مرداد 1391, 04:46 صبح
سلام
من در برنامه یک متد دارم که یک buttonGroup ها را به عنوان ورودی می گیرد و رادیو باتنی که از ان buttonGroup انتخاب شده را return میکند و این radioButton های return شده را درarrayList قرار دادم حالا چطوری باید از این array که حاوی RadioButton های انتخاب شده اند برای چک کردن جواب های صحیح استفاده کنم ؟ البته یک arrayList هم دارم که عناصرش از نوع string اند و جواب های صحیح در ان قرار دارند
باتشکر

spiderman200700
یک شنبه 01 مرداد 1391, 14:20 عصر
شما نباید خود JRadioButton ها رو ذخیره کنید. باید بیاید ببینید JRadioButtonی که انتخاب شده چندمین JRadioButton از بین چهار گزینه ی موجوده. مثلا اگه سومین گزینه بود، عدد سه رو داخل آرایه ذخیره کنید.

yegane8
دوشنبه 02 مرداد 1391, 01:50 صبح
کاری که فرمودید رو انجام دادم
اینو زدم

String[] userAnswer;


final ArrayList<ButtonGroup> buttonGroupsList = new ArrayList<ButtonGroup>();
for (int i = 0; i < 10; i++) {
ButtonGroup buttonGroup = new ButtonGroup();
for (int j = 1; j < 5; j++) {
JRadioButton rb = new JRadioButton("Word" + j);
buttonGroup.add(rb);
add(rb);
if(rb.isSelected()){

userAnswer[i] = String.valueOf(j);
}
}
buttonGroupsList.add(buttonGroup);

در actionListener باتن check هم اینو زدم که ببینم اصلا چیزی چاپ میشه یا نه

check_btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {

int n= buttonGroupsList.lastIndexOf(buttonGroupsList);
for(int i=0;i<n;i++){
System.out.printf("%s", userAnswer[i]);
اما هیچی چاپ نشد
مشکل از چیه؟
باتشکر

yegane8
دوشنبه 02 مرداد 1391, 02:04 صبح
الان این قسمت رو تغییر دادم تا دیگه مجبور این ArrayList<ButtonGroup> buttonGroupsList از نوع final نباشه
check_btn.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

for(int i=0;i<10;i++){

System.out.printf("%s", userAnswer[i]);

این خطا رو داد
:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at SwingRadioButton$1.actionPerformed(SwingRadioButto n.java:104)
at javax.swing.AbstractButton.fireActionPerformed(Abs tractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed (AbstractButton.java:2346)
at javax.swing.DefaultButtonModel.fireActionPerformed (DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultB uttonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseRe leased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.jav a:6510)
at javax.swing.JComponent.processMouseEvent(JComponen t.java:3323)
at java.awt.Component.processEvent(Component.java:627 5)
چرا؟
باتشکر

spiderman200700
دوشنبه 02 مرداد 1391, 12:03 عصر
احتمالا مشکل از userAnswer هست که جایی واسش شی نشاختی

yegane8
دوشنبه 02 مرداد 1391, 13:06 عصر
اخه userAnswer که یک متغییر String[] userAnswer;
یعنی چی واسش شی نساختم؟

spiderman200700
دوشنبه 02 مرداد 1391, 14:21 عصر
آرایه اول یاید حتفظه مورد نیازشو به اندازه ای که میخواد بگیره ، بعد ازش استفاده کنی. که مثل شی ساخت با new باید این کار رو کرد. مثلا اینطوری:
String[] userAnswe=new String[10];

yegane8
دوشنبه 02 مرداد 1391, 14:49 عصر
آرایه اول یاید حتفظه مورد نیازشو به اندازه ای که میخواد بگیره ، بعد ازش استفاده کنی. که مثل شی ساخت با new باید این کار رو کرد. مثلا اینطوری:
String[] userAnswe=new String[10];
میشه بگین چه وقت هایی باید این کار رو انجام داد String[] userAnswe=new String[10]
من یه جای دیگه تو برنامم
Scanner input = new Scanner()
String[] name =input.nextLine()
اینطوری نوشتم ولی String[] name اصلا new نکردم
چرا اونجا درست بود اینجا نه؟
باتشکر

yegane8
دوشنبه 02 مرداد 1391, 14:55 عصر
الان که این را String[] userAnswe=new String[10]; زدم 10 تا null بر می گردونه(هم تو متد سازنده new کردم هم تو متدهای دیگه امتحان کردم )
باید چی کار کنم؟
باتشکر

spiderman200700
دوشنبه 02 مرداد 1391, 15:49 عصر
فکر نمیکنم اینطوری درست بشه.
باید کدها رو کامل دید

yegane8
دوشنبه 02 مرداد 1391, 16:19 عصر
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.*;

public class RadioButton extends JFrame {

private String[] userAnswer;

public RadioButton() {
super("RadioButton");
userAnswer = new String[10];
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new FlowLayout());
setSize(350, 560);
setResizable(true);
setframe();}
private void setframe(){
ArrayList<ButtonGroup> buttonGroupsList = new ArrayList<ButtonGroup>();
for (int i = 0; i < 10; i++) {
ButtonGroup buttonGroup = new ButtonGroup();
for (int j = 1; j < 5; j++) {
JRadioButton rb = new JRadioButton("Word" + j);
buttonGroup.add(rb);
if(rb.isSelected()){
userAnswer[i] = String.valueOf(j);
}

add(rb);
}
buttonGroupsList.add(buttonGroup);
JSeparator jSeparator = new JSeparator();
jSeparator.setPreferredSize(new Dimension(400, 20));
add(jSeparator);
}
setVisible(true);

JButton check_btn = new JButton("check");
check_btn.setLocation(500, 400);
add(check_btn);
check_btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {

// int n= buttonGroupsList.lastIndexOf(buttonGroupsList);
for(int i=0;i<10;i++){
System.out.printf("%d", userAnswer[i]);

}
}

});
}


public static void main(String args[]) {
new RadioButton();
}
}
باید چی کارش کنم؟
باتشکر

spiderman200700
دوشنبه 02 مرداد 1391, 17:23 عصر
وقتی دارید userAnswer رو پر میکنید هیچ JRadioButtonی انتخاب نشده. پس هیچ کدوم از خونه های userAnswer پر نمیشه. یعنی همش null باقی میمونه
اینطوری باید بنویسید

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Enumeration;
import javax.swing.*;

public class RadioButton extends JFrame {

private int[] userAnswer;
private ArrayList<ButtonGroup> buttonGroupsList;

public RadioButton() {
super("RadioButton");

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new FlowLayout());
setSize(350, 560);
setResizable(true);
setframe();
}

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

JButton check_btn = new JButton("check");
check_btn.setLocation(500, 400);
add(check_btn);
check_btn.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

userAnswer = new int[buttonGroupsList.size()];
for (int i = 0; i < userAnswer.length; i++) {
userAnswer[i] = -1;
}
int i = 0;
for (ButtonGroup bg : buttonGroupsList) {
Enumeration<AbstractButton> rbs = bg.getElements();
int j = 0;
while (rbs.hasMoreElements()) {
JRadioButton rb = (JRadioButton) rbs.nextElement();
if (rb.isSelected()) {
userAnswer[i] = j;
System.out.println(j);
}
j++;
}
i++;
}
}
});
}

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

مقدار اولیه ی تمام خانه های userAnswer برابر -1 هست. -1 یعنی هیچ خونه ای انتخاب نشده

yegane8
دوشنبه 02 مرداد 1391, 18:55 عصر
خیییییییییلی ممنون :لبخندساده:
فقط Enumeration یه چیز مثل itretor هست؟ و چه فرقی با itretor دارد؟
جواب این سوالم رو هم هنوز نفهمیدم که کی باید این String[] name را new کرد و کی لازم نیست

میشه بگین چه وقت هایی باید این کار رو انجام داد String[] userAnswe=new String[10]
من یه جای دیگه تو برنامم
Scanner input = new Scanner()
String[] name =input.nextLine()
اینطوری نوشتم ولی String[] name اصلا new نکردم
چرا اونجا درست بود اینجا نه؟
باتشکر

spiderman200700
دوشنبه 02 مرداد 1391, 21:01 عصر
خواهش میکنم

آره تو مایه های همون Iterator هست

برای هر آرایه ای حتما باید با new از حافظه واسش فضا گرفت. مگر اینکه بخوای یه آرایه ی آماده رو به یه آرایه دیگه تخصیص داد.

yegane8
دوشنبه 02 مرداد 1391, 22:21 عصر
اما توی این متد
private void setMap() throws FileNotFoundException {
Scanner input = new Scanner(new File("FileName.txt"));
while (input.hasNextLine()) {
String[] values = input.nextLine().split(",");//values separate by
}
input.close();
}
برای string[] values هیچ حافظه ای گرفته نشده ( هیچ جا new نشده)
و ارایه اماده ی دیگری هم بهش تخصیص داده نشده ولی چرا تو برنامه مشکلی به وجود نیامده؟
باتشکر

spiderman200700
دوشنبه 02 مرداد 1391, 22:57 عصر
در این جا متد split کلمات String رو تفکیک میکنه و خودش یه آرایه تعریف میکنه و این کلمات تفکیک شده رو توی آرایه میریزه و این آرایه رو برمیگردون و توی اون خط به آرایه ی values تخصیص داده میشه.
این یعنی در نهایت هر آرایه یه جایی به قول شما new میشه.