2012-05-17 21 views
5

JLabel stili olan bir JTextField'a ihtiyacım var (başka bir deyişle, bir JLabel'a ihtiyacım var ancak metni seçebilmek istiyorum).JTextField, JLabel stili ile GTKLookAndFeel

JTextField like a JLabel (Mac)

ama sonraki sonuç almak Ubuntu (GTKLookAndFeel) üzerine:

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")); 
... 

Windows ve Mac üzerinde çalışıyor

JTextField like a JLabel (Ubuntu)

"ile" dir JTextField ve "Boyut", bir JLabel

+0

ilgi Out , hangi Ubuntu/Java sürümlerini çalıştırıyorsunuz? Bu kodu sadece OpenJDK 1.6.0_24 ile Ubuntu 12.04 makinemi çalıştırdım ve beklendiği gibi çalışıyor; sadece bir etikete benziyor. – Jamie

+0

@Jamie Ubuntu 10.04 ve java 1.6.0.22. UIManager.setLookAndFeel (UIManager.getSystemLookAndFeelClassName()) ayarladınız mı? – Ivan

+0

Ah, bu onu kırdı ... Özür dilerim, varsayılan olarak GTK LookAndFeel'i kullanacağını düşündüm, ama görünüşe göre değil! – Jamie

cevap

1

Sonunda yerine JTextField ait JEditorPane kullanılarak beklenen sonucu aldığım:

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

görünüyor GTK Görünüm ve İzlenim JTextField özel bir arka plan izin vermez: http://bugs.sun.com/view_bug.do?bug_id=6531760

2
Eğer BorderUIResource değiştirmek zorunda

, aynı şekilde:

Ben setBorder(null); GTK L & F UIMananager geldi/içinde varsayılan Borders sıfırlamak için, ya JTextField

DÜZENLEME doğrudan UIMananager bu değer ayarlamak için düşünüyorum demonstrated here for FontUIResource

EDIT2 olarak:

enter image description here ve 1,5 sn 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

Zaten aynı sonuçlarla setBorder (null) denedim. İkinci çözümü anlamıyorum. – Ivan

+0

[UIManager Defaults] 'u çalıştırmak için lütfen tıklayın (http://tips4java.wordpress.com/2008/10/09/uimanager-defaults/), GTK'yı seçin ve JTextField – mKorbel

+0

için ilgili değerleri arayın lütfen cevabımda düzenle bakın – mKorbel