2010-07-26 27 views
31

के साथ सीमा से छुटकारा पाने के लिए कैसे करें यदि आप नीचे छोटा नमूना चलाते हैं तो आपको केंद्र क्षेत्र के चारों ओर एक सीमा दिखाई देगी। मुझे यकीन नहीं है कि यह सीमा क्यों दिख रही है।JTable/JScrollPane

ऐसा तब होता है जब एक जेटीबल JScrollPane में होता है। मैंने इसे हटाने के लिए विभिन्न चीजों की कोशिश की लेकिन अब तक कोई भाग्य नहीं है। JSCrollPane के बिना एक जेटीबल कोई सीमा नहीं दिखाता है।

नीचे नमूना देखें। TIA।

public class TestScrollPane extends JFrame { 

    public static void main(String[] args) { 
     JFrame frame = new TestScrollPane(); 
     JPanel panel = new JPanel(); 
     JTable table = new JTable(); 

     panel.setLayout(new BorderLayout()); 
     panel.add(new JLabel("NORTH"), BorderLayout.NORTH); 
     panel.add(new JLabel("SOUTH"), BorderLayout.SOUTH); 

     JScrollPane sp = new JScrollPane(table); 
     // None of these have any effect 
     sp.setBorder(null); 
     sp.getInsets().set(0, 0, 0, 0); 
     sp.setViewportBorder(null); 
     sp.getViewport().setBorder(null); 
     sp.getViewport().getInsets().set(0, 0, 0, 0); 
     sp.getViewport().setOpaque(true); 

     panel.add(sp, BorderLayout.CENTER); 
     // Adding the table alone shows no border 
     // panel.add(table, BorderLayout.CENTER); 
     frame.add(panel); 

     frame.setVisible(true); 
    } 

    public TestScrollPane() throws HeadlessException { 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setMinimumSize(new Dimension(100, 100)); 
    } 
} 
+3

शून्य सीमा निर्धारित करने के बजाय, क्या आपने BorderFactory.createEmptyBorder() को आजमाया है? –

+0

इसके अलावा, 'pack()' 'frame' को अनदेखा न करें। – trashgod

उत्तर

52

उपयोग BorderFactory.createEmptyBorder (...

का उपयोग करके:

sp.setBorder(createEmptyBorder()); 

यह काम करता हैं।

आपका मुख्य विधि हो जाता है:

public static void main(String[] args) { 
    JFrame frame = new TestScrollPane(); 
    JPanel panel = new JPanel(); 
    JTable table = new JTable(); 

    panel.setLayout(new BorderLayout()); 
    panel.add(new JLabel("NORTH"), BorderLayout.NORTH); 
    panel.add(new JLabel("SOUTH"), BorderLayout.SOUTH); 

    JScrollPane sp = new JScrollPane(table); 
    sp.setBorder(BorderFactory.createEmptyBorder()); 
    panel.add(sp, BorderLayout.CENTER); 
    frame.add(panel); 

    frame.setVisible(true); 
} 
+0

धन्यवाद! ठीक लग रहा है। :) – sproketboy

+1

कूल :)। मुझे लगता है (लेकिन यकीन नहीं) स्विंग घटकों के डिफ़ॉल्ट व्यवहार लाइन सीमा है। तो सीमावर्ती वर्ग उन्हें अनुकूलित करने के लिए आपका मित्र है :) –

+0

बहुत अच्छा जवाब! मेरी समस्या भी ठीक हो गई !! – Handsken

4

दिलचस्प सीमा गायब हो जाता है जब आप इस लाइन को हटाने:) अशक्त के बजाय

sp.setBorder(null); 
+1

विंडोज एक्सपी के साथ मेरे लिए नहीं। शायद यह एक मंच मुद्दा है। – sproketboy

+0

यह निश्चित रूप से आपके एल एंड एफ पर निर्भर है। ओएस एक्स पर, आपको एक बहुत ही छोटी सीमा मिलती है जो मुझे लगता है कि छाया या कुछ जैसा दिखना चाहिए (बिल्कुल यकीन नहीं - मैंने घटक को एक गैर-मानक स्थान पर रखा जहां सीमा सिर्फ सही नहीं दिख रही थी, इस प्रकार मेरी निकासी की इच्छा यह।) – ArtOfWarfare

0

मुझे लगता है कि उचित ठीक 'अशक्त' के लिए viewportView पर सीमा निर्धारित करने के लिए है।

5

मैं जवाब नहीं कर सका एक ही प्रश्न के लिए उत्तर के लिए लेकिन इसके बाद के संस्करण देख रहा था ... इसलिए मैं एक बेहतर जवाब मिला:

JScrollPane jsp = new JScrollPane(); 

//ur other codes 

jsp.setViewportBorder(null); 
0

JTable table.setIntercellSpacing(new Dimension(0, 0)) काम करता है के लिए।

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

  • कोई संबंधित समस्या नहीं^_^