2014-04-08 4 views
3

텍스트 필드가 seteditable(false)setEnabled(false)이지만이 경우 배경색이 변경되어 다시 변경할 수 없습니다. enter image description here텍스트 필드의 비활성화 배경색 설정

참조, 응용 프로그램의 배경 색상과 2 개 장애인 텍스트 필드의 배경 색상은 다른 질문 : 장애인과 비 편집 가능한 텍스트 필드의 배경색을 변경하는 방법.

t5은 사진의 오른쪽 텍스트 입력란입니다. 내가 시도한 바 : t5.setBackground(Color....), t5.setBackground(UIManager.getColor("t5.background")), t5.setBackground(null);을 생성자의 끝에 넣는다. 나는 심지어 Background color of JTextField doesn't become 'grayed out' when disabled after the background color had been changed beforeJTextField background color on enable/disable을 읽었지만 내가 원하는 것을 할 수있는 방법을 찾아 내지 못했습니다. Netbeans 8 (Nimbus Theme)을 사용하고 있습니다. LaF를 Windows로 설정하면 색상은 동일하지만 Nimbus 자체에서 색상을 동일하게 만드는 방법은 무엇입니까?

+0

, 난 당신이 후광을 사용하고 생각합니다. [Nimbus Defaults] (http://docs.oracle.com/javase/tutorial/uiswing/lookandfeel/_nimbusDefaults.html#primary)를 보셔야합니다. –

+0

@peeskillet하지만 어떻게 설정합니까? MadProgrammer의 방법은 나를 위해, 아마도 내가 생성자의 끝에 넣어 오전 작동하지 않았다? –

답변

4

"비활성"색은 (일반적으로) 룩앤필에 의해 제공됩니다. 예를 들어, Windows에서 재산 TextField.inactiveBackground는 후광 그냥 좋아

이 어려운

TextField

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.EventQueue; 
import java.awt.FlowLayout; 
import javax.swing.JFrame; 
import javax.swing.JTextField; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 
import javax.swing.plaf.ColorUIResource; 

public class TestTextField { 

    public static void main(String[] args) { 
     new TestTextField(); 
    } 

    public TestTextField() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
       } 

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

       JTextField field = new JTextField("Hello", 10); 
       field.setEditable(false); 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setLayout(new FlowLayout()); 
       frame.add(field); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

} 

이 후광 예와 업데이트 ... 비 편집 가능한 배경 색상에 영향을 할 수 있습니다 ...

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.FlowLayout; 
import java.awt.Graphics2D; 
import java.awt.Insets; 
import java.awt.Paint; 
import java.awt.Rectangle; 
import java.awt.Shape; 
import java.awt.geom.Ellipse2D; 
import java.awt.geom.Path2D; 
import java.awt.geom.Rectangle2D; 
import java.awt.geom.RoundRectangle2D; 
import javax.swing.JComponent; 
import javax.swing.JFrame; 
import javax.swing.JTextField; 
import javax.swing.Painter; 
import javax.swing.SwingUtilities; 
import javax.swing.UIDefaults; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 
import javax.swing.plaf.ColorUIResource; 
import javax.swing.plaf.nimbus.AbstractRegionPainter; 

public class TestTextField { 

    public static void main(String[] args) { 
     new TestTextField(); 
    } 

    public TestTextField() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
//     UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
        UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
       } 


       JTextField field = new JTextField("Hello", 10); 
       field.setEditable(false); 
       field.setEnabled(false); 
       UIDefaults overrides = new UIDefaults(); 
       overrides.put("TextField.background", new ColorUIResource(Color.RED)); 
       overrides.put("TextField[Enabled].backgroundPainter", new Painter<JTextField>() { 

        @Override 
        public void paint(Graphics2D g, JTextField field, int width, int height) { 
         g.setColor(Color.RED); 
         g.fill(new Rectangle(0, 0, width, height)); 
        } 

       }); 
       overrides.put("TextField[Disabled].backgroundPainter", new Painter<JTextField>() { 

        @Override 
        public void paint(Graphics2D g, JTextField field, int width, int height) { 
         g.setColor(Color.GREEN); 
         Insets insets = field.getInsets(); 
         g.fill(new Rectangle(
           insets.left, 
           insets.top, 
           width - (insets.left + insets.right), 
           height - (insets.top + insets.bottom))); 
        } 

       }); 
       field.putClientProperty("Nimbus.Overrides", overrides); 
//    field.putClientProperty("Nimbus.Overrides.InheritDefaults",false); 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setLayout(new FlowLayout()); 
       frame.add(field); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 
} 

나는 두 개의 값만 표시했습니다 (기본값 및 장애인), 당신은 다른 사람들과 놀 필요가 있습니다. 당신이 field.putClientProperty("Nimbus.Overrides.InheritDefaults",false);를 사용하는 경우

TextField.background = DerivedColor(color=255,255,255 parent=nimbusLightBackground offsets=0.0,0.0,0.0,0 pColor=255,255,255 
TextField.contentMargins = javax.swing.plaf.InsetsUIResource[top=6,left=6,bottom=6,right=6] 
TextField.disabled = DerivedColor(color=214,217,223 parent=control offsets=0.0,0.0,0.0,0 pColor=214,217,223 
TextField.disabledText = DerivedColor(color=142,143,145 parent=nimbusDisabledText offsets=0.0,0.0,0.0,0 pColor=142,143,145 
TextField.focusInputMap = [email protected] 
TextField.font = javax.swing.plaf.FontUIResource[family=SansSerif,name=sansserif,style=plain,size=12] 
TextField.foreground = DerivedColor(color=0,0,0 parent=text offsets=0.0,0.0,0.0,0 pColor=0,0,0 
TextFieldUI = javax.swing.plaf.synth.SynthLookAndFeel 
TextField[Disabled].backgroundPainter = [email protected] 
TextField[Disabled].borderPainter = [email protected] 
TextField[Disabled].textForeground = DerivedColor(color=142,143,145 parent=nimbusDisabledText offsets=0.0,0.0,0.0,0 pColor=142,143,145 
TextField[Enabled].backgroundPainter = [email protected] 
TextField[Enabled].borderPainter = [email protected] 
TextField[Focused].borderPainter = [email protected] 
TextField[Selected].backgroundPainter = [email protected] 
TextField[Selected].textForeground = DerivedColor(color=255,255,255 parent=nimbusSelectedText offsets=0.0,0.0,0.0,0 pColor=255,255,255 

흥미롭게도, 당신은 매우 간단한 필드 (국경 등) 결국하지 경향이있다.

이 방법은 단 하나의 구성 요소에 영향을 미친다 ... @MadProgrammer의 대답에 추가

+0

내 경우에는 이것이 작동하지 않는 것 같습니다. 여기에 제 생성자의 코드입니다. http://pastebin.com/hy8fP7iQ –

+0

열쇠는 absoulate입니다. UIManager.put ("t5.inactiveBackground", new ColorUIResource (new Color (255, 0) , 0)));'작동하지 않는다. 반드시 TextField.inactiveBackground이어야한다. - 윈도우 룩앤필을 사용한다고 가정 할 때 – MadProgrammer

+0

나는 멍청이 모양과 느낌을 사용하고있다. –

관련 문제