2014-10-08 6 views
1

내 응용 프로그램의 모든 텍스트 필드에 대해 편집 할 수없는 전경 (이해할 수 없도록 JTextComponent.setEditable(false))을 변경하려고하지만 UIManager에 대한 적절한 속성 키를 찾지 못했습니다. 편집 할 수없는 전경을 세계적으로 변경할 수 있습니까? "정상"에서JTextField에 대해 편집 할 수없는 전경을 변경하는 방법

+1

:

import java.awt.Color; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import javax.swing.JComponent; import javax.swing.UIManager; import javax.swing.plaf.ColorUIResource; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.synth.SynthTextFieldUI; /** * <code>ExtSynthTextFieldUI</code>. * * @author SMedvynskyy */ public class ExtSynthTextFieldUI extends SynthTextFieldUI { /** Handler to change foreground when editable status changed. */ private final PropertyChangeListener listener = new PropertyChangeListener() { /** Save the old color here. */ private Color standardColor = UIManager.getColor(getPropertyPrefix() + ".foreground"); @Override public void propertyChange(PropertyChangeEvent evt) { if ("editable".equals(evt.getPropertyName())) { if (Boolean.TRUE.equals(evt.getNewValue())) { getComponent().setForeground(standardColor); } else { standardColor = getComponent().getForeground(); // set the "inactive foreground" getComponent().setForeground(new ColorUIResource(0xA0A0A0)); } } } }; /** * Creates a new UI object for the given component. * * @param table component to create UI object for * @return the UI object */ public static ComponentUI createUI(JComponent table) { return new ExtSynthTextFieldUI(); } /** * {@inheritDoc} */ @Override protected void installListeners() { super.installListeners(); getComponent().addPropertyChangeListener("editable", listener); } /** * {@inheritDoc} */ @Override protected void uninstallListeners() { getComponent().removePropertyChangeListener("editable", listener); super.uninstallListeners(); } } 

단순히 기본 UI를 재설정해야 L & F로 설치 한 후? – MadProgrammer

+0

주요 목표는 Synthetica이지만, 그것이 가능할지를 아는 것이 중요합니다. –

+0

@MadProgrammer Jyloo의 답변을 얻었습니다. Synthetica는 다음 릴리스에서 지원할 것입니다. –

답변

2

보고 당신은 텍스트, 당신은 예를 들어 "TextField.inactiveForeground"

UIManager.put("TextField.inactiveBackground", new ColorUIResource(Color.RED)); 

룩을 사용의 "TextField.inactiveBackground" 키를 사용하여 수, 느낌과 후광 일부 "추가로 필요할 수 있습니다 느낌 "일 ...

NonEditableTextFied

import java.awt.Color; 
import java.awt.EventQueue; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import javax.swing.JFrame; 
import javax.swing.JTextArea; 
import javax.swing.JTextField; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 
import javax.swing.plaf.ColorUIResource; 

public class NonEdtiableField { 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException ex) { 
       } catch (InstantiationException ex) { 
       } catch (IllegalAccessException ex) { 
       } catch (UnsupportedLookAndFeelException ex) { 
       } 

       UIManager.put("TextField.inactiveBackground", new ColorUIResource(Color.RED)); 

       JFrame frame = new JFrame("Test"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setLayout(new GridBagLayout()); 
       GridBagConstraints gbc = new GridBagConstraints(); 
       gbc.gridwidth = GridBagConstraints.REMAINDER; 
       JTextField editable = new JTextField(10); 
       JTextField nonEditable = new JTextField(10); 
       nonEditable.setEditable(false); 
       frame.add(editable); 
       frame.add(nonEditable); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

} 
+0

두 가지 상태가 편집 가능하고 활성화되어 있습니다. 어떤 OP가 의미하는지 모르겠습니다. – mKorbel

+2

의미 setDisabledTextColor – mKorbel

+0

편집 가능한 상태를 의미하기 위해 * "편집 불가능 전경"*을 사용했지만 언급 된 'disabledTextColor' 속성을 갖는 것이 좋습니다 – MadProgrammer

2

솔루션은 발견 : 모양과 느낌

UIManager.put("TextFieldUI", ExtSynthTextFieldUI.class.getName()); 
+0

PropertyChangeListener는 필요하지 않습니다. 당신이 포장하고 싶다면, 스윙을 Html 안에 넣고 특별한 것을 가지고, rmtime에 빌드하고, 휘발성이고 캐시 됨 – mKorbel

+0

@mKorbel UI는 래핑 된 객체의 속성이 변경 될 때 알림을 받아야합니다. 그렇지 않으면 응용 프로그램의 모든 JTextField 객체를 내 확장 클래스로 대체해야합니다. –

+0

:-) .............. – mKorbel