2012-05-29 17 views
9

मेरे पास यह कोड है जिसमें मैं स्क्रोल करने योग्य पैनल (जेपीनल) फिट करने की कोशिश कर रहा हूं लेकिन मुझे यह नहीं मिला। यहां मेरा कोड है:जावा में जेएफआरएएम स्क्रॉल करने योग्य कैसे करें?

public class Sniffer_GUI extends JFrame { 
Canvas c = new Canvas(); 
ConnectorPropertiesPanel props; 
public Sniffer_GUI() { 
    super("JConnector demo"); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    getContentPane().setLayout(new GridBagLayout()); 
    init(); 

    getContentPane().add(new JLabel("Connectors example. You can drag the connected component to see how the line will be changed"), 
         new GridBagConstraints(0, 0, 2, 1, 1, 0, GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 0, 5), 0, 0)); 
    getContentPane().add(initConnectors(), 
         new GridBagConstraints(0, 1, 1, 1, 1, 1, GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0, 0)); 
    getContentPane().add(props, 
         new GridBagConstraints(1, 1, 1, 1, 0, 1, GridBagConstraints.NORTHWEST, GridBagConstraints.VERTICAL, new Insets(5, 0, 5, 5), 0, 0)); 
    setSize(800, 600); 
    setLocationRelativeTo(null); 

} 

अग्रिम धन्यवाद।

मैं कम से कम यह एक jScrollPane अंदर अपने कार्य करता है, एक अच्छा कदम है एक कोड आंशिक रूप से काम करने के लिए लगता है कि जोड़ने के लिए संपादित करें ...

public Sniffer_GUI() { 
    super("JConnector demo"); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    JPanel container = new JPanel(); 
    JScrollPane scrPane = new JScrollPane(container); 
    add(scrPane); 
    scrPane.setLayout(new ScrollPaneLayout()); 
    init(); 

    add(initConnectors()); 

    setSize(800, 600); 
    setLocationRelativeTo(null); 

} 

लेकिन यह अभी भी स्क्रॉल नहीं है,।

+0

जहाँ आपके कोड जो jScrollPane का उपयोग करने की कोशिश करता है? – Puce

+0

@Puce शायद वह JScrollPane के बारे में नहीं जानता था। – brimborium

+0

मुझे JScrollPane चर घोषित करने से आगे नहीं पता ... = ( –

उत्तर

0

इस प्रयास करें:

JScrollPane sp = new JScrollPane(); 
this.add(sp). 
sp.add(*GUI elements for your applications.*) 

कुछ ऐसा है जैसे आप के लिए काम करना चाहिए। कुछ इस तरह

+5

स्क्रोलपैन में तत्व जोड़ना आम तौर पर आप जो चाहते हैं वह नहीं है। आमतौर पर, आप कंटेनर पैनल को JScrollPane के निर्माता को पास करते हैं या आप 'setViewportView' –

19

एक JPanel स्क्रॉल करें और एक कंटेनर के रूप में उपयोग,: this पर एक नज़र के साथ-साथ ले लो

JPanel container = new JPanel(); 
JScrollPane scrPane = new JScrollPane(container); 
add(scrPane); // similar to getContentPane().add(scrPane); 
// Now, you can add whatever you want to the container 
+0

का उपयोग करते हैं, जब मैं तत्व जोड़ने की कोशिश करता हूं तो मुझे स्क्रैप के लेआउट के साथ समस्याएं मिलती हैं, मैं मूल कोड से कुछ कैसे कर सकता हूं? –

+2

@JoeLewis सामग्री फलक के साथ आप जो भी करते हैं, उसे करने के बजाय, इसे Eng.Fouad के उत्तर में वर्णित कंटेनर पर करें और केवल सामग्री फलक में स्क्रोलपैन जोड़ें (डिफ़ॉल्ट लेआउट, BorderLayout, सामग्री फलक के लेआउट प्रबंधक के रूप में छोड़ दें) –

+0

@ गुइलाउम पोलेट ठीक सही Eng.Fouad का कोड आंशिक रूप से काम कर रहा है जैसा कि मैंने मूल पोस्ट में संपादित किया है, यह काम करता है लेकिन यह अभी भी स्क्रॉल करने योग्य नहीं है ... –

6

विस्तार करने के लिए @ Eng.Fouad जवाब:

public class Sniffer_GUI extends JFrame { 
    Canvas c = new Canvas(); 
    ConnectorPropertiesPanel props; 
    public Sniffer_GUI() { 
     super("JConnector demo"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JPanel container = new JPanel(); 
     JScrollPane scrPane = new JScrollPane(container); 
     getContentPane().add(scrPane); 
     container.setLayout(new GridBagLayout()); 
     init(); 

     container.add(new JLabel("Connectors example. You can drag the connected component to see how the line will be changed"), 
          new GridBagConstraints(0, 0, 2, 1, 1, 0, GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 0, 5), 0, 0)); 
     container.add(initConnectors(), 
          new GridBagConstraints(0, 1, 1, 1, 1, 1, GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0, 0)); 
     container .add(props, 
          new GridBagConstraints(1, 1, 1, 1, 0, 1, GridBagConstraints.NORTHWEST, GridBagConstraints.VERTICAL, new Insets(5, 0, 5, 5), 0, 0)); 
     setSize(800, 600); 
     setLocationRelativeTo(null); 

    } 
} 
+0

मेरा नायक ... xD अब मुझे इसे लंबवत स्क्रॉल करने की आवश्यकता है, क्योंकि यह केवल क्षैतिज है ...: पी –

+0

@ जोएलविस आप इन चीजों को समायोजित करने के लिए लंबवत और क्षैतिज स्क्रॉल बार नीतियां सेट कर सकते हैं। [स्क्रॉलपेन ट्यूटोरियल] (http://java.sun.com/docs/books/tutorial/uiswing/components/scrollpane.html) और इसके [जावाडॉक] (http://docs.oracle.com/javase) को पढ़ने पर विचार करें /7/docs/api/javax/swing/JScrollPane.html) –

+0

मेरी समस्या यह है कि iniConnectors() एक जेपीनल पुनर्प्राप्त करता है और मुझे उस पैनल को स्क्रॉल करने की आवश्यकता होती है, क्योंकि यह सबसे महत्वपूर्ण है, हालांकि मैं इसे भी नहीं कर सकता init कनेक्टर को किसी अन्य JScrollPane में जोड़ना और फिर कंटेनर .add ("नया JScrollPane", आदि ...); –

1
करने के लिए

जेएफआरएम स्क्रोल करने योग्य का एक घटक बनाएं, जेएसक्रोलपैन में घटक को लपेटें:

JScrollPane myJScrollPane = new JScrollPane(myJLabel, 
     JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, 
     JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); 

और menti को प्रतिस्थापित करें myJScrollPane के साथ myJLabel के ऑन्स। मेरे लिए काम किया

+0

JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED और JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED को JScrollPane के कन्स्ट्रक्टर के अंदर दिखाने के लिए धन्यवाद। मेरे [उत्तर] में (http://stackoverflow.com/a/32872829/4744263) मैं setVerticalScrollBarPolicy का उपयोग कर रहा हूं और इसके बजाय HorizontalScrollBarPolicy विधि सेट करें। इस संभावना के लिए धन्यवाद। –

1

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

उदाहरण के लिए, मेरे पास एक प्रोग्राम था जहां मैंने इस तरह एक जेएफआरएएम-चौड़ा स्क्रोलपैन स्थापित किया था। मेरे पास फ्रेम में एक टैब में एक JTextArea भी था जो सामग्री फलक के समान आकार था। यह टेक्स्ट एरिया भी अपने स्क्रोलपैन में था (यह किसी और चीज की तुलना में प्रोजेक्ट के आसपास एक खराब था)। जब मैंने टेक्स्ट एरिया में जमा करने के लिए फ़ाइल से सामग्री लोड की, तो उसने टेक्स्ट एरिया के चारों ओर स्क्रॉलबार को ट्रिगर किया।

परिणाम यह हुआ कि मेरी, चलो यह innerScrollPane कॉल, अब क्योंकि स्क्रॉलबार की JFrame, जो पहले दिखाई नहीं किया गया था से बड़ा था। इसके बाद यह पता चला कि अब मैं बाहरी स्क्रॉलपैन को कॉल करने जा रहा हूं, इसके स्क्रॉलबार को प्रदर्शित करने के लिए, जो तब आंतरिक स्क्रॉलबार को ढंकता है।

यह आसानी से अपनी फ़ाइल खोलने विधि के अंत के लिए एक अतिरिक्त window.pack() तर्क जोड़कर हल किया गया था, लेकिन मैं सिर्फ इस बाहर फेंक करना चाहता था। यदि आप सावधान नहीं हैं तो स्क्रॉलबार संभावित रूप से विंडो में सामग्री को कवर कर सकते हैं। लेकिन ... इस समस्या को रोकने के लिए लाखों तरीके हैं, इसलिए यह एक बड़ा सौदा नहीं है। बस ऐसा कुछ जिसके बारे में अवगत होना चाहिए।

6

हो सकता है कि इस में मदद मिलेगी ...

JFrame frame = new JFrame(); 
JPanel panel = new JPanel(); 

// add something to you panel... 
// panel.add(...); 

// add the panel to a JScrollPane 
JScrollPane jScrollPane = new JScrollPane(panel); 
// only a configuration to the jScrollPane... 
jScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); 
jScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); 

// Then, add the jScrollPane to your frame 
frame.getContentPane().add(jScrollPane);