2012-05-17 18 views
5

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

JTextField value = new JTextField(valueText); 
value.setEditable(false); 
value.setBorder(BorderFactory.createEmptyBorder); 
value.setForeground(UIManager.getColor("Label.foreground"));    
value.setFont(UIManager.getFont("Label.font")); 
value.setBackground(UIManager.getBackground("Label.background")); 
... 

यह विंडोज और मैक पर ठीक काम करता है:

JTextField like a JLabel (Mac)

लेकिन मैं अगले परिणाम प्राप्त Ubuntu (GTKLookAndFeel) पर:

JTextField like a JLabel (Ubuntu)

कहाँ "द्वारा" है जेटीक्स्टफिल्ड और "साइज" एक जेएलएबल

+0

ब्याज से बाहर , उबंटू/जावा के कौन से संस्करण आप चल रहे हैं? मैंने ओपनजेडीके 1.6.0_24 के साथ अपना उबंटू 12.04 मशीन चलाया है, और यह उम्मीद के अनुसार काम करता है; यह सिर्फ एक लेबल की तरह दिखता है। – Jamie

+0

@ जैमी उबंटू 10.04 और जावा 1.6.0.22। क्या आपने UIManager.setLookAndFeel (UIManager.getSystemLookAndFeelClassName()) सेट किया है? – Ivan

+0

आह, यह तोड़ता है ... क्षमा करें, मैंने सोचा कि यह डिफ़ॉल्ट रूप से जीटीके लुक एंडफेल का उपयोग करेगा, लेकिन स्पष्ट रूप से नहीं! – Jamie

उत्तर

1

अंत में मैं उम्मीद परिणाम JTextField के बजाय JEditorPane का उपयोग कर मिल गया:

JEditorPane value = new JEditorPane(); 
value.setText(valueText); 
... 

ऐसा लगता है जीटीके देखो और महसूस JTextField में एक कस्टम पृष्ठभूमि की अनुमति नहीं है कि: http://bugs.sun.com/view_bug.do?bug_id=6531760

2
है

मुझे लगता है कि setBorder(null);/में डिफ़ॉल्ट Borders रीसेट जीटीके एल & एफ के लिए UIMananager से आया है, या JTextField

संपादित करें के लिए UIMananager सीधे को यह मान सेट करने के लिए:

आप BorderUIResource बदलना होगा, उसी तरह demonstrated here for FontUIResource

EDIT2 के रूप में:

enter image description here और 1,5 सेकंड में enter image description here

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.border.Border; 
import javax.swing.border.LineBorder; 
import javax.swing.plaf.BorderUIResource; 

public class SystemFontDisplayer extends JFrame { 

    private static final long serialVersionUID = 1L; 
    private JFrame frame = new JFrame("Nimbus UIDeafaults and Font"); 
    private javax.swing.Timer timer = null; 
    private JTextField testTextField = new JTextField("testTextField"); 
    private JButton testButton = new JButton("testButton"); 

    public SystemFontDisplayer() { 
     frame.setLayout(new GridLayout(4, 0, 20, 20)); 
     testTextField.setBorder(null); 
     frame.add(testTextField); 
     frame.add(testButton); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setLocation(200, 105); 
     frame.pack(); 
     frame.setVisible(true); 
     start(); 
    } 

    private void start() { 
     timer = new javax.swing.Timer(1500, updateCol()); 
     timer.setRepeats(false); 
     timer.start(); 
    } 

    public Action updateCol() { 
     return new AbstractAction("text load action") { 

      private static final long serialVersionUID = 1L; 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       Border border = new LineBorder(Color.red, 2); 
       final BorderUIResource res = new BorderUIResource(border); 
       UIManager.getLookAndFeelDefaults().put("TextField.border", new BorderUIResource(border)); 
       UIManager.getLookAndFeelDefaults().put("Button.border", new BorderUIResource(border)); 
       SwingUtilities.updateComponentTreeUI(frame); 

       /*Border border = new LineBorder(Color.red, 2); 
       try { 
       LookAndFeel lnf = UIManager.getLookAndFeel().getClass().newInstance(); 
       final BorderUIResource res = new BorderUIResource(border); 
       UIDefaults uiDefaults = lnf.getDefaults(); 
       uiDefaults.put("TextField.border", res); 
       uiDefaults.put("Label.border", res); 
       uiDefaults.put("Button.border", res); 
       UIManager.getLookAndFeel().uninitialize(); 
       UIManager.setLookAndFeel(lnf); 
       } catch (InstantiationException ex) { 
       } catch (IllegalAccessException ex) { 
       } catch (UnsupportedLookAndFeelException ex) { 
       } 
       UIDefaults defaults = UIManager.getDefaults(); 
       BorderUIResource res = new BorderUIResource(border); 
       defaults.put("TextField.border", res); 
       defaults.put("Label.border", res); 
       defaults.put("Button.border", res); 
       SwingUtilities.updateComponentTreeUI(frame);*/ 
      } 
     }; 
    } 

    public static void main(String arg[]) { 
     java.awt.EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       SystemFontDisplayer systemFontDisplayer = new SystemFontDisplayer(); 
      } 
     }); 
    } 
} 
+0

मैंने पहले ही एक ही परिणाम के साथ सेटबॉर्डर (शून्य) की कोशिश की है। मैं दूसरे समाधान को समझ नहीं पा रहा हूं। – Ivan

+0

कृपया [UIManager डिफ़ॉल्ट] चलाने के लिए (http://tips4java.wordpress.com/2008/10/09/uimanager-defaults/), जीटीके का चयन करें और JTextField – mKorbel

+0

के लिए संबंधित रिलायटेड मानों को खोजें कृपया मेरे उत्तर – mKorbel