मैं जावा प्रोग्रामिंग के लिए नया हूं लेकिन एक अनुभवी सी ++ प्रोग्रामर हूं। मैं सीख रहा था कि स्विंग का उपयोग करके जीयूआई कैसे प्रोग्राम करें। मैं सोच रहा था कि कैसे संसाधन गहन (रनटाइम के साथ-साथ स्मृति) एक्शनलिस्टनर हैं? क्या श्रोताओं की कुल संख्या में कोई सामान्य दिशानिर्देश है कि किसी को किसी विशेष कार्यक्रम में बनाना चाहिए? प्रदर्शन प्रभावित होने तक कितने लोग प्रभावित होते हैं?जावा में श्रोताओं के संसाधन कितने गहन हैं?
मैं वर्तमान में प्रोग्रामर पुस्तक के लिए डीटेल डेवलपर श्रृंखला जावा के माध्यम से जावा सीख रहा हूं। एक विशेष उदाहरण में उनके पास कक्षा के लिए एक निजी चर के रूप में JRadioButtonItems की एक सरणी है। उन्होंने एक आइटमहैंडलर क्लास भी बनाया था जो एक्शनलिस्टर वर्ग से विस्तारित हुआ था, जिसने चयनित बटन को निर्धारित करने के लिए रेडियो बटन की पूरी सरणी पर एक रैखिक खोज आयोजित की थी और तदनुसार कार्यक्रम की स्थिति को बदल दिया था। सरणी के सभी रेडियो बटनों ने एक ही एक्शन श्रोता साझा किया। यह सूचना की एक रैखिक खोज करने के लिए अक्षम था, इसलिए मैंने कन्स्ट्रक्टर में संशोधित करने के लिए प्रस्तावित मूल्य में लेने के लिए एक्शनलिस्टर वर्ग को फिर से लिखा था और प्रत्येक रेडियो बटन को अपने स्वयं के एक्शनलिस्टर को कन्स्ट्रक्टर द्वारा पारित प्रस्तावित मूल्य के साथ देने के लिए दिया था एक रैखिक खोज कर रहे हैं। कौन सी विधि बेहतर प्रदर्शन-वार होगी? मैं नोब की तरह लगने के लिए क्षमा चाहता हूं, मैं जावा में प्रोग्रामिंग के लिए आदतों का एक अच्छा सेट विकसित करने की कोशिश कर रहा हूं। संलग्न कोड का एक छोटा सा उदाहरण है। धन्यवाद।
/************************************************************************
Original code in Deitel book with linear search of selected Radio button in Actionlistener
****************************************************************************/
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JRadioButtonMenuItem;
public class MenuTest extends JFrame{
private final Color colorValues[] = {Color.BLACK, Color.WHITE, Color.GREEN};
private JRadioButtonMenuItem colorItems[];
private ButtonGroup colorButtonGroup;
public MenuTest(){
super("Menu Test");
JMenu fileMenu = new JMenu("File");
JMenuBar bar = new JMenuBar();
setJMenuBar(bar);
bar.add(fileMenu);
String colors[] = {"Black", "White", "Green"};
JMenu colorMenu = new JMenu("Color");
colorItems = new JRadioButtonMenuItem[colors.length];
colorButtonGroup = new ButtonGroup();
ItemHandler itemHandler = new ItemHandler();
for(int count = 0; count < colors.length; count++){
colorItems[count] = new JRadioButtonMenuItem(colors[count]);
colorMenu.add(colorItems[count]);
colorButtonGroup.add(colorItems[count]);
colorItems[count].addActionListener(itemHandler);
}
colorItems[0].setSelected(true);
fileMenu.add(colorMenu);
fileMenu.addSeparator();
}
private class ItemHandler implements ActionListener{
public void actionPerformed(ActionEvent event){
for(int count = 0; count < colorItems.length; count++){
if(colorItems[count].isSelected()){
getContentPane().setBackground(colorValues[count]);
}
}
}
}
public static void main(String args[]){
MenuTest menuFrame = new MenuTest();
menuFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
menuFrame.setSize(600,400);
menuFrame.setVisible(true);
menuFrame.getContentPane().setBackground(menuFrame.colorValues[0]);
}
}
/************************************************************************
My Code redefined version of Deitel's w/o linear search in ActionListener
************************************************************************/
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JRadioButtonMenuItem;
public class MenuTest extends JFrame{
private final Color colorValues[] = {Color.BLACK, Color.WHITE, Color.GREEN};
private JRadioButtonMenuItem colorItems[];
private ButtonGroup colorButtonGroup;
public MenuTest(){
super("Menu Test");
JMenu fileMenu = new JMenu("File");
JMenuBar bar = new JMenuBar();
setJMenuBar(bar);
bar.add(fileMenu);
String colors[] = {"Black", "White", "Green"};
JMenu colorMenu = new JMenu("Color");
colorItems = new JRadioButtonMenuItem[colors.length];
colorButtonGroup = new ButtonGroup();
ItemHandler itemHandler = new ItemHandler();
for(int count = 0; count < colors.length; count++){
colorItems[count] = new JRadioButtonMenuItem(colors[count]);
colorMenu.add(colorItems[count]);
colorButtonGroup.add(colorItems[count]);
colorItems[count].addActionListener(new ItemHandler(colorValues[count]));
}
colorItems[0].setSelected(true);
fileMenu.add(colorMenu);
fileMenu.addSeparator();
}
private class ItemHandler implements ActionListener{
private Color setColor;
public ItemHandler(Color inColor){
super();
setColor = inColor;
}
public void actionPerformed(ActionEvent event){
getContentPane().setBackground(setColor);
repaint();
}
}
public static void main(String args[]){
MenuTest menuFrame = new MenuTest();
menuFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
menuFrame.setSize(600,400);
menuFrame.setVisible(true);
menuFrame.getContentPane().setBackground(menuFrame.colorValues[0]);
}
}
आप एक अच्छा मुद्दे को उठाने: श्रोताओं आम तौर पर बहुत कम करना चाहिए। अगर उन्हें कुछ जटिल करने की ज़रूरत है, तो उन्हें स्विंगवर्कर वर्ग का उपयोग करके आदर्श रूप से एक नया धागा बनाना चाहिए, फिर तुरंत लौटना चाहिए। –