PDA

View Full Version : اجرا نشدن JCheckBox در برنامه



Sina.iRoid
چهارشنبه 23 مهر 1393, 16:25 عصر
سلام. دوستان من این برنامه رو نوشتم. به نظر خودم همه چیزش درسته. اما اجرا نمیشه. می خوام وقتی که چک-باکس ها انتخاب میشه، فونت تکست-فیلد هم عوض بشه. اما این اتفاق نمی افته.
ممنوت میشم اگر راهنماییم کنید.

کلاس CheckBoxFrame:


import java.awt.FlowLayout;
import java.awt.Font;


import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JTextField;


@SuppressWarnings("serial")
public class CheckBoxFrame extends JFrame {

public JTextField textField; //displays text in changing fonts
public JCheckBox boldCheckBox; //to select/deselect bold
public JCheckBox italicCheckBox; //to select/deselect italic

//Constructor
public CheckBoxFrame() {
super("JCheckBox Frame");
setLayout(new FlowLayout());

//set up JTextField and set its font
textField = new JTextField("Watch the font style change", 20);
textField.setFont(new Font("Serif", Font.PLAIN, 15));
add(textField); //add textField to frame

//Create CheckBox
boldCheckBox = new JCheckBox("Bold");
italicCheckBox = new JCheckBox("Italic");
add(boldCheckBox);
add(italicCheckBox);

//Create object from CheckBoxHandler
CheckBoxHandler ob = new CheckBoxHandler();
boldCheckBox.addItemListener(ob);
italicCheckBox.addItemListener(ob);
}
}


کلاس CheckBoxHandler:

import java.awt.Font;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;




public class CheckBoxHandler implements ItemListener{


@Override
public void itemStateChanged(ItemEvent e) {

CheckBoxFrame ob = new CheckBoxFrame(); //Object from CheckBoxFram

Font font = null; //stores the new font

if ((ob.boldCheckBox.isSelected()) && (ob.italicCheckBox.isSelected())) {
font = new Font("Serif", Font.BOLD + Font.ITALIC, 15);
}else if (ob.boldCheckBox.isSelected()) {
font = new Font("Serif", Font.BOLD, 15);
}else if (ob.italicCheckBox.isSelected()) {
font = new Font("Serif", Font.ITALIC, 15);
}else {
font = new Font("Serif", Font.PLAIN, 15);
}
ob.textField.setFont(font); //set textField's font
}
}


و این هم کلاس اصلی برنامه:

public class DriverClass {

public static void main(String[] args) {

//Object from CheckBoxFrame
CheckBoxFrame ob = new CheckBoxFrame();
ob.setSize(400, 300);
ob.setVisible(true);
}
}


من از کتاب دایتل دارم این مطالب و می خونم. فرق این کد با کد کتاب در اینه که، کتاب فقط دو تا کلاس تعریف کرده. یعنی کلاس CheckBoxHandler و من خودم تعریف کردم اما کتاب این کلاس و داخل کلاس CheckBoxFrame نوشته.
و اینکه میشه بگین که این برنامه از لحاظ شی گرایی درست هست یا نه!؟
ممنون.

abdoullah.aberi
چهارشنبه 23 مهر 1393, 16:46 عصر
سلام دوست عزیز از actionListener استفاده کن به جای additemlistener :

package test;


import java.awt.FlowLayout;
import java.awt.Font;


import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JTextField;


@SuppressWarnings("serial")
public class tst extends JFrame {

public JTextField textField; //displays text in changing fonts
public JCheckBox boldCheckBox; //to select/deselect bold
public JCheckBox italicCheckBox; //to select/deselect italic

//Constructor
public tst() {
super("JCheckBox Frame");
setLayout(new FlowLayout());

//set up JTextField and set its font
textField = new JTextField("Watch the font style change", 20);
textField.setFont(new Font("Serif", Font.PLAIN, 15));
add(textField); //add textField to frame

//Create CheckBox
boldCheckBox = new JCheckBox("Bold");
italicCheckBox = new JCheckBox("Italic");
add(boldCheckBox);
add(italicCheckBox);

//Create object from CheckBoxHandler


boldCheckBox.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent arg0) {


Font font; //stores the new font


if (boldCheckBox.isSelected()) {
font = new Font("Serif", Font.BOLD, 15);
}else {
font = new Font("Serif", Font.PLAIN, 15);
}
textField.setFont(font); //set textField's font

}
});
italicCheckBox.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {


Font font; //stores the new font

if (italicCheckBox.isSelected()) {
font = new Font("Serif", Font.ITALIC, 15);
}else {
font = new Font("Serif", Font.PLAIN, 15);
}
textField.setFont(font); //set textField's font

}
});
}
}




فقط این دو کلاس رو دارم کلاس سومی رو پاک کردم به دلیل پیچیده نشدن کار :



package test;


public class tset {

public static void main(String[] args) {

//Object from CheckBoxFrame
tst ob = new tst();
ob.setSize(400, 300);
ob.setVisible(true);
}
}


امیدوارم مفید واقع شده باشه

ahmad.mo74
چهارشنبه 23 مهر 1393, 17:28 عصر
سلام،


@SuppressWarnings("serial")
public class CheckBoxFrame extends JFrame {


public JTextField textField; //displays text in changing fonts
public JCheckBox boldCheckBox; //to select/deselect bold
public JCheckBox italicCheckBox; //to select/deselect italic


//Constructor
public CheckBoxFrame() {
super("JCheckBox Frame");
setDefaultCloseOperation(WindowConstants.EXIT_ON_C LOSE);
setLayout(new FlowLayout());


//set up JTextField and set its font
textField = new JTextField("Watch the font style change", 20);
textField.setFont(new Font("Serif", Font.PLAIN, 15));
add(textField); //add textField to frame


//Create CheckBox
boldCheckBox = new JCheckBox("Bold");
italicCheckBox = new JCheckBox("Italic");
add(boldCheckBox);
add(italicCheckBox);


//Create object from CheckBoxHandler
CheckBoxHandler ob = new CheckBoxHandler(this);
boldCheckBox.addItemListener(ob);
italicCheckBox.addItemListener(ob);
}


}



public class CheckBoxHandler implements ItemListener {


private CheckBoxFrame frame;


public CheckBoxHandler(CheckBoxFrame frame) {
this.frame = frame;
}


@Override
public void itemStateChanged(ItemEvent e) {


Font font; //stores the new font


if ((frame.boldCheckBox.isSelected()) && (frame.italicCheckBox.isSelected())) {
font = new Font("Serif", Font.BOLD + Font.ITALIC, 15);
} else if (frame.boldCheckBox.isSelected()) {
font = new Font("Serif", Font.BOLD, 15);
} else if (frame.italicCheckBox.isSelected()) {
font = new Font("Serif", Font.ITALIC, 15);
} else {
font = new Font("Serif", Font.PLAIN, 15);
}
frame.textField.setFont(font); //set textField's font
}


}



public class DriverClass {


public static void main(String[] args) {
//Object from CheckBoxFrame
CheckBoxFrame ob = new CheckBoxFrame();
ob.setSize(400, 300);
ob.setVisible(true);
}


}