एडब्ल्यूटी के बिना जावा जीयूआई श्रोताओं


82

मैं एक शुरुआती जावा डेवलपर हूं, जो सिर्फ इंटरनेट ट्यूटोरियल से सीख रहा है। मैं पूर्ण स्क्रीन जीयूआई एप्लिकेशन सीख रहा हूं। मुझे कल बताया गया था कि मुझे अपने कार्यक्रमों में AWT का उपयोग नहीं करना चाहिए, क्योंकि यह पुराना है। मुझे पहले से ही प्रकाश और हेवीवेट घटकों के बारे में पता है, मुख्य समस्या माउस और कीबोर्ड श्रोताओं की है। AWT पुराना क्यों है? AWT के बिना प्रोग्राम कैसे बनाएं (श्रोताओं को JCompenders आदि से जोड़कर) (किस तरह की स्विंग चीजें AWT की जगह ले सकती हैं)?


मैंने AWT के अलावा कभी भी श्रोताओं के बारे में नहीं सुना है। इसे जानकर अच्छा लगेगा।
लौवहोपले

3
@ निदेओ: javax.swing.eventपैकेज में 20 + श्रोताओं पर अपने F कान ’को दावत दें । ;)
एंड्रयू थॉम्पसन

@ और धन्यवाद, धन्यवाद! : P क्या AWT श्रोताओं के बजाय स्विंग श्रोताओं का उपयोग करने का एक कारण है?
लौवहोपले

जवाबों:


43

आपको दी गई जानकारी की गलत व्याख्या कर रहे हैं। आपको AWT घटकों के साथ स्विंग घटकों का उपयोग करने से बचना चाहिए । AWT श्रोता संरचना, लेआउट प्रबंधक, आदि के साथ स्विंग का उपयोग करना ठीक है और वास्तव में यह असंभव नहीं है।


36

कुछ अच्छे जवाब आए हैं, लेकिन मैं थोड़ा अलग पहलू रखना चाहता हूं। चीजें जो स्विंग AWT से परे प्रदान करती हैं।

अवयव

स्विंग का समर्थन करता है में दस्तावेजों स्टाइल JEditorPaneऔर JTextPaneऔर एक सीमित हद तक कुछ अन्य में HTML का उपयोग कर के लिए JComponents। AWT किसी भी घटक में स्टाइल दस्तावेजों का समर्थन नहीं करता है।

AWT कोई वृक्ष आधारित संरचना प्रदान करता है JTree, जैसे कोई सारणीबद्ध संरचना, जैसे JTable, का कोई संस्करण नहीं JToolBar

AWT में JColorChooserसाधारण उपयोगिता वर्ग के लिए कोई भी समकक्ष (जिसे मैं खोज या याद कर सकता हूं) नहीं है - JOptionPane

श्रोताओं

जैसा कि एक टिप्पणी में बताया गया है, 20+ अतिरिक्त / वैकल्पिक श्रोताओं को देखें javax.swing.event पैकेज ।

प्लगेबल लुक एंड फील

देशी पीएलएएफ सहित रन-टाइम पर स्विंग घटकों को एक विशेष रूप में देखा जा सकता है और महसूस किया जा सकता है।

नेस्टेड लेआउट उदाहरण पर स्क्रीन शॉट्स देखेंकुछ और नमूनों के लिए ।

लेआउट

AWT लेआउट के ढेर सारे के अलावा, स्विंग प्रदान करता है:

  1. BoxLayout
  2. GroupLayout
  3. OverlayLayout
  4. ScrollPaneLayout
  5. SpringLayout
  6. ViewportLayout

अन्य


उस संक्षिप्त विवरण में शायद मैं और भी बहुत कुछ याद कर रहा हूं, लेकिन नीचे की रेखा यह है कि स्विंग बिलकुल नया और अधिक सक्षम GUID टूलकिट है।

दोनों AWT में कक्षाओं का निर्माण और उन पर बहुत निर्भर करता है।


7

जावा का स्विंग एक्शन लिस्ट्रेनर्स लेता है, जो AWT पैकेज का हिस्सा हैं। यदि आप स्विंग का उपयोग करना चाहते हैं, तो आपको AWT ActionListener के कुछ रूप का उपयोग करना चाहिए। यह सिर्फ उसी तरह है जैसे चीजें हैं। मैं जटिल गिनी के लिए जावा का उपयोग करने का सुझाव नहीं देता, लेकिन न ही यह कहूंगा कि AWT पुराना है, क्योंकि कोई प्रत्यक्ष प्रतिस्थापन नहीं है। इस प्रकार, बस आगे बढ़ें और AWT का उपयोग करें।

एक विकल्प के रूप में, आप JOGL में देख सकते हैं, लेकिन यह अधिक है अगर आप कुछ गेम-उन्मुख बनाने की कोशिश कर रहे हैं।


2

यह एक छोटा सा उदाहरण है जो प्रदर्शित कर सकते हैं, का उपयोग है javax.swing.Action पैकेज तुम भी के लिए जावा दस्तावेज़ का संदर्भ लेना चाहिए javax.swing.event पैकेज मुझे लगता है कि आपको लगता है कि पा रहे हैं। । ।

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

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JToolBar;

class SysOutHelloAction extends AbstractAction {
    private static final Icon printIcon = new ImageIcon("Print.gif");

    SysOutHelloAction() {
        super("Print", printIcon);
        putValue(Action.SHORT_DESCRIPTION, "Hello, World");
    }

    public void actionPerformed(ActionEvent actionEvent) {
        System.out.println("Hello, World");
    }
}

public class SwingActionTester {
    public static void main(String args[]) {
        JFrame frame = new JFrame("Action Sample");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        final Action printAction = new SysOutHelloAction();
        JMenuBar menuBar = new JMenuBar();
        JMenu menu = new JMenu("File");
        menuBar.add(menu);
        menu.add(new JMenuItem(printAction));
        JToolBar toolbar = new JToolBar();
        toolbar.add(new JButton(printAction));
        JButton enableButton = new JButton("Enable");
        ActionListener enableActionListener = new ActionListener() {
            public void actionPerformed(ActionEvent actionEvent) {
                printAction.setEnabled(true);
            }
        };
        enableButton.addActionListener(enableActionListener);
        JButton disableButton = new JButton("Disable");
        ActionListener disableActionListener = new ActionListener() {
            public void actionPerformed(ActionEvent actionEvent) {
                printAction.setEnabled(false);
            }
        };
        disableButton.addActionListener(disableActionListener);
        JButton relabelButton = new JButton("Relabel");
        ActionListener relabelActionListener = new ActionListener() {
            public void actionPerformed(ActionEvent actionEvent) {
                printAction.putValue(Action.NAME, "Changed Action Value");
            }
        };
        relabelButton.addActionListener(relabelActionListener);
        JPanel buttonPanel = new JPanel();
        buttonPanel.add(enableButton);
        buttonPanel.add(disableButton);
        buttonPanel.add(relabelButton);
        frame.setJMenuBar(menuBar);
        frame.add(toolbar, BorderLayout.SOUTH);
        frame.add(buttonPanel, BorderLayout.NORTH);
        frame.setSize(300, 200);
        frame.setVisible(true);
    }
}

1

तुम सही हो। जावा एडब्ल्यूटी और जावा स्प्रिंग दोनों अप्रचलित हैं। इसके बजाय JavaFX का उपयोग करें।
और, एक टिप्पणी के रूप में, मैं जावा के साथ निराश हूं, कि यह "हर जगह एक बार लिखना" लिखा जाना चाहिए था, जब अब यह पता चला है कि "हर तीन महीने में अपने ऐप को फिर से लिखना चाहिए" क्योंकि नया जावा पिछले कोड को तोड़ता है, और नए पैकेज पुराने की जगह लेते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.