2009-04-25 21 views
39

मेरे पास एक जेएफआरएएम पर एक बटन है जिसे क्लिक करने पर मैं उपयोगकर्ता इनपुट के लिए एकाधिक टेक्स्ट क्षेत्रों के साथ पॉपअप करने के लिए एक संवाद बॉक्स चाहता हूं। मैं यह जानने के लिए चारों तरफ देख रहा हूं कि यह कैसे करना है, लेकिन मैं और अधिक भ्रमित हो रहा हूं। क्या कोई मदद कर सकता है?जावा - एक कस्टम संवाद बॉक्स कैसे बनाएं?

उत्तर

73

यदि आपको कस्टम व्यवहार के तरीके में ज्यादा आवश्यकता नहीं है, तो जॉप्शनपेन एक अच्छा समय बचाने वाला है। यह ओके/रद्द विकल्पों के प्लेसमेंट और स्थानीयकरण का ख्याल रखता है, और अपनी खुद की कक्षाओं को परिभाषित किए बिना कस्टम संवाद दिखाने के लिए एक तेज़ और गंदा तरीका है। अधिकांश समय जॉप्शनपेन में "संदेश" पैरामीटर एक स्ट्रिंग है, लेकिन आप एक जेकंपोनेंट या जेकंपोनेंट्स की सरणी भी पास कर सकते हैं।

उदाहरण:

JTextField firstName = new JTextField(); 
JTextField lastName = new JTextField(); 
JPasswordField password = new JPasswordField(); 
final JComponent[] inputs = new JComponent[] { 
     new JLabel("First"), 
     firstName, 
     new JLabel("Last"), 
     lastName, 
     new JLabel("Password"), 
     password 
}; 
int result = JOptionPane.showConfirmDialog(null, inputs, "My custom dialog", JOptionPane.PLAIN_MESSAGE); 
if (result == JOptionPane.OK_OPTION) { 
    System.out.println("You entered " + 
      firstName.getText() + ", " + 
      lastName.getText() + ", " + 
      password.getText()); 
} else { 
    System.out.println("User canceled/closed the dialog, result = " + result); 
} 
+0

यह उदाहरण दुर्भाग्य उदाहरण क्षेत्रों के बीच टैब के लिए समर्थन नहीं करता है या दबाव "ठीक है" के लिए दर्ज करें। – aioobe

+0

आप एक कन्स्ट्रक्टर का उपयोग करके जॉप्शनपेन बनाकर संवाद पर कुछ और नियंत्रण प्राप्त कर सकते हैं, फिर परिणामस्वरूप जॉक्शनपेन पर createDialog को कॉल कर सकते हैं। यह आपको एक जेडियलॉग देता है, जिसे आप इसे दृश्यमान करने से पहले अनुकूलित कर सकते हैं। हालांकि, किसी बिंदु पर, यह आपके स्वयं के कस्टम घटक को रोल करने के लिए और अधिक समझ में आता है। –

+1

@aioobe मेरे जेआरई में दोनों उदाहरण टैबबिंग और ओके बटन काम के लिए एंटर दबाते हैं (हालांकि आपकी टिप्पणी के बाद से बहुत अधिक समय बीत चुका है)। हालांकि, इस समाधान का एक और नकारात्मक पक्ष है: ओके बटन दबाए गए और संवाद विंडो के बीच विचलित करने का कोई तरीका नहीं है। तो आपकी कार्रवाई रद्द करने का कोई तरीका नहीं है। – Vic

2

This lesson जावा ट्यूटोरियल से प्रत्येक स्विंग घटक विस्तार से उदाहरण और एपीआई लिंक के साथ बताता है।

1

यदि आप NetBeans IDE (इस समय नवीनतम संस्करण 6.5.1 का उपयोग करते हैं) का उपयोग करते हैं, तो आप फ़ाइल-> नई परियोजना का उपयोग करके मूल जीयूआई जावा एप्लिकेशन बनाने के लिए इसका उपयोग कर सकते हैं और जावा श्रेणी एप्लिकेशन जावा डेस्कटॉप एप्लिकेशन का चयन कर सकते हैं।

एक बार बनाया गया, आपके पास एक साधारण बेयर हड्डियों GUI ऐप होगा जिसमें मेनू चयन का उपयोग करके खोला जा सकता है। आपको इसे अपनी जरूरतों के अनुसार अनुकूलित करने में सक्षम होना चाहिए और बटन क्लिक से संवाद खोलना सीखना चाहिए।

आप संवाद को दृष्टि से संपादित करने में सक्षम होंगे। वहां मौजूद वस्तुओं को हटाएं और कुछ टेक्स्ट क्षेत्र जोड़ें। इसके साथ खेलें और यदि आप अटक जाते हैं तो अधिक प्रश्नों के साथ वापस आएं :)

1

ठीक है, आप अनिवार्य रूप से एक जेडियलॉग बनाते हैं, अपने टेक्स्ट घटकों को जोड़ते हैं और इसे दृश्यमान बनाते हैं। इससे मदद मिल सकती है यदि आप उस विशिष्ट बिट को सीमित करते हैं जिसमें आपको परेशानी हो रही है।

1

अपनी पसंद के एक संवाद अनुकूलित करने के लिए इस सरल वर्ग का प्रयास करें:

import java.util.ArrayList; 
import java.util.List; 

import javax.swing.JComponent; 
import javax.swing.JLabel; 
import javax.swing.JOptionPane; 
import javax.swing.JRootPane; 

public class CustomDialog 
{ 
    private List<JComponent> components; 

    private String title; 
    private int messageType; 
    private JRootPane rootPane; 
    private String[] options; 
    private int optionIndex; 

    public CustomDialog() 
    { 
     components = new ArrayList<>(); 

     setTitle("Custom dialog"); 
     setMessageType(JOptionPane.PLAIN_MESSAGE); 
     setRootPane(null); 
     setOptions(new String[] { "OK", "Cancel" }); 
     setOptionSelection(0); 
    } 

    public void setTitle(String title) 
    { 
     this.title = title; 
    } 

    public void setMessageType(int messageType) 
    { 
     this.messageType = messageType; 
    } 

    public void addComponent(JComponent component) 
    { 
     components.add(component); 
    } 

    public void addMessageText(String messageText) 
    { 
     JLabel label = new JLabel("<html>" + messageText + "</html>"); 

     components.add(label); 
    } 

    public void setRootPane(JRootPane rootPane) 
    { 
     this.rootPane = rootPane; 
    } 

    public void setOptions(String[] options) 
    { 
     this.options = options; 
    } 

    public void setOptionSelection(int optionIndex) 
    { 
     this.optionIndex = optionIndex; 
    } 

    public int show() 
    { 
     int optionType = JOptionPane.OK_CANCEL_OPTION; 
     Object optionSelection = null; 

     if(options.length != 0) 
     { 
      optionSelection = options[optionIndex]; 
     } 

     int selection = JOptionPane.showOptionDialog(rootPane, 
       components.toArray(), title, optionType, messageType, null, 
       options, optionSelection); 

     return selection; 
    } 

    public static String getLineBreak() 
    { 
     return "<br>"; 
    } 
} 
0

मैं एक कस्टम संवाद एपीआई बनाया। इसे यहां देखें https://github.com/MarkMyWord03/CustomDialog। यह संदेश और पुष्टि बॉक्स का समर्थन करता है। इनपुट और विकल्प संवाद जैसे कि joptionpane में जल्द ही लागू किया जाएगा। CUstomDialog एपीआई से

नमूना त्रुटि संवाद: CustomDialog Error Message

संबंधित मुद्दे