swing ट्यूटोरियल
झूले से शुरुआत हो रही है
खोज…
टिप्पणियों
जावाएफएक्स द्वारा स्विंग की गई है। ओरेकल आमतौर पर JavaFX के साथ नए एप्लिकेशन विकसित करने की सलाह देता है। अभी भी: पूर्वाभास के लिए जावा में स्विंग का समर्थन किया जाएगा। JavaFX भी अच्छी तरह से स्विंग के साथ एकीकृत करता है, ताकि अनुप्रयोगों को सुचारू रूप से परिवर्तित किया जा सके।
इवेंट डिस्पैच थ्रेड पर आपके अधिकांश स्विंग घटकों की दृढ़ता से अनुशंसा की जाती है। अपने GUI सेटअप को एक invokeLater
कॉल में बंडल करना भूल जाना आसान है। जावा प्रलेखन से:
स्विंगिंग इवेंट हैंडलिंग कोड एक विशेष थ्रेड पर चलता है जिसे ईवेंट प्रेषण थ्रेड के रूप में जाना जाता है। अधिकांश कोड जो स्विंग के तरीकों को आमंत्रित करता है, वह भी इस धागे पर चलता है। यह आवश्यक है क्योंकि अधिकांश स्विंग ऑब्जेक्ट विधियां "थ्रेड सुरक्षित" नहीं हैं: उन्हें कई थ्रेड्स जोखिम थ्रेड हस्तक्षेप या मेमोरी संगतता त्रुटियों से आमंत्रित करना। कुछ स्विंग घटक विधियों को एपीआई विनिर्देश में "थ्रेड सेफ" लेबल किया जाता है; इन्हें किसी भी धागे से सुरक्षित रूप से लाया जा सकता है। अन्य सभी स्विंग घटक विधियों को घटना प्रेषण धागे से मंगाना चाहिए। इस नियम की अनदेखी करने वाले कार्यक्रम अधिकांश समय सही ढंग से कार्य कर सकते हैं, लेकिन अप्रत्याशित त्रुटियों के अधीन होते हैं जिन्हें पुन: उत्पन्न करना मुश्किल होता है।
इसके अलावा, जब तक अच्छे कारण के लिए, हमेशा सुनिश्चित करें कि आपने setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE)
या फिर आपको संभवतः JVM को नष्ट करने के लिए भूल जाने पर मेमोरी लीक से निपटना पड़ सकता है।
एक बटन के साथ वृद्धि
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
/**
* A very simple Swing example.
*/
public class SwingExample {
/**
* The number of times the user has clicked the button.
*/
private long clickCount;
/**
* The main method: starting point of this application.
*
* @param arguments the unused command-line arguments.
*/
public static void main(final String[] arguments) {
new SwingExample().run();
}
/**
* Schedule a job for the event-dispatching thread: create and show this
* application's GUI.
*/
private void run() {
SwingUtilities.invokeLater(this::createAndShowGui);
}
/**
* Create the simple GUI for this application and make it visible.
*/
private void createAndShowGui() {
// Create the frame and make sure the application exits when the user closes
// the frame.
JFrame mainFrame = new JFrame("Counter");
mainFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
// Add a simple button and label.
JPanel panel = new JPanel();
JButton button = new JButton("Click me!");
JLabel label = new JLabel("Click count: " + clickCount);
panel.add(button);
panel.add(label);
mainFrame.getContentPane().add(panel);
// Add an action listener to the button to increment the count displayed by
// the label.
button.addActionListener(actionEvent -> {
clickCount++;
label.setText("Click count: " + clickCount);
});
// Size the frame.
mainFrame.setBounds(80, 60, 400, 300);
//Center on screen
mainFrame.setLocationRelativeTo(null);
//Display frame
mainFrame.setVisible(true);
}
}
परिणाम
बटन के रूप में "मुझे क्लिक करें!" दबाया जाता है क्लिक गणना एक की वृद्धि होगी:
"नमस्ते दुनिया!" लंबोदर के साथ खिड़की के शीर्षक पर
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
public class Main {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
JFrame frame = new JFrame("Hello World!");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setSize(200, 100);
frame.setVisible(true);
});
}
}
main
विधि के अंदर:
पहली पंक्ति पर SwingUtilities.invokeLater
को कहा जाता है और कोड के एक खंड () -> {...}
साथ एक SwingUtilities.invokeLater
अभिव्यक्ति को पास किया जाता है। यह EDT पर पास किए गए लंबोदर एक्सप्रेशन को निष्पादित करता है, जो कि मुख्य धागे के बजाय इवेंट डिस्पैच थ्रेड के लिए छोटा है। यह आवश्यक है, क्योंकि लैम्बडा एक्सप्रेशन के कोड ब्लॉक के अंदर, स्विंगिंग घटक बनने और अपडेट होने वाले हैं।
लैम्ब्डा अभिव्यक्ति के कोड ब्लॉक के अंदर:
पहली पंक्ति में, एक नया JFrame
उदाहरण जिसे frame
कहा जाता frame
को new JFrame("Hello World!")
का उपयोग करके बनाया गया है। यह "हैलो वर्ल्ड!" के साथ एक विंडो इंस्टेंस बनाता है। इसके शीर्षक पर। बाद में दूसरी पंक्ति पर frame
को EXIT_ON_CLOSE
से कॉन्फ़िगर किया गया है। अन्यथा खिड़की बस बंद हो जाएगी, लेकिन कार्यक्रम का निष्पादन सक्रिय रहने वाला है। तीसरी पंक्ति frame
आवृत्ति को चौड़ाई में 200 पिक्सेल और setSize
विधि का उपयोग करके ऊँचाई में 100 पिक्सेल तक setSize
करती है। अब तक निष्पादन में कुछ भी दिखाई नहीं देगा। चौथी पंक्ति पर setVisible(true)
को कॉल करने के बाद ही, स्क्रीन पर दिखाई देने के लिए frame
इंस्टेंस को कॉन्फ़िगर किया गया है।
"नमस्ते दुनिया!" संगतता के साथ विंडो शीर्षक पर
java.lang.Runnable
का उपयोग करके हम अपनी "हैलो वर्ल्ड" बनाते हैं। उदाहरण के लिए जावा उपयोगकर्ताओं के लिए उपलब्ध संस्करण के साथ 1.2 रिलीज तक सभी तरह से डेटिंग:
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
public class Main {
public static void main(String[] args){
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run(){
JFrame frame = new JFrame("Hello World!");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setSize(200, 100);
frame.setVisible(true);
}
});
}
}