2012-11-10 43 views
1

我目前在NetBeans中创建一个GUI,并且我有一个包含颜色列表的JSpinner,但我不确定如何使文本成为每个文本的相应颜色。JSpinner文本颜色

I.E. - 红色(应该是红色等)

下面是迄今为止针对的JSpinner代码:

Color_Selector_Spinner = new javax.swing.JSpinner(); Color_Selector_Spinner.setModel(new javax.swing.SpinnerListModel(new String[] { "Red", "Orange", "Yellow", "Green", "Blue", "Indigo", "Violet"}));

回答

4

您需要以下进行彩色编码JSpinner

  1. A ChangeListenerJSpinner当元件值发生变化时更新颜色

  2. String值翻译为Color。

微调器中只有一个JTextField使用,因此必须在每次更改事件时使用当前颜色更新。

spinner.addChangeListener(new ChangeListener() { 

    @Override 
    public void stateChanged(ChangeEvent e) { 

    try { 
     String colorString = (String)spinner.getValue(); 

     Field field = Class.forName("java.awt.Color").getField(colorString.toLowerCase()); // toLowerCase because the color fields are RED or red, not Red 
     Color color = (Color)field.get(null); 

     JTextField tf = ((JSpinner.DefaultEditor) spinner.getEditor()).getTextField(); 
     tf.setForeground(color); 

     } catch (Exception ex) { // handle ex } 
    } 
}); 
+0

Ahhh好的。感谢一帮帮忙! – Drew

+0

用于getTextField的+1 –

2

我个人更喜欢设置我自己的编辑器,而不是铸造现有的编辑器,并希望它不会在未来破碎。所以稍微修改版的Reimeus代码

import javax.swing.*; 
import java.awt.Color; 
import java.lang.reflect.Field; 

public class ColorSpinnerDemo { 

    public static void main(String[] args) { 
    JFrame testFrame = new JFrame("TestFrame"); 

    JSpinner spinner = new JSpinner(new SpinnerListModel(new String[]{"Red", "Orange", "Yellow", "Green"})); 
    spinner.setEditor(new SpinnerEditor(spinner).getComponent()); 

    testFrame.add(spinner); 

    testFrame.pack(); 
    testFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
    testFrame.setVisible(true); 
    } 

    private static class SpinnerEditor{ 
    private JLabel label = new JLabel(); 

    public SpinnerEditor(JSpinner spinner){ 
     spinner.addChangeListener(new ChangeListener() { 
     @Override 
     public void stateChanged(ChangeEvent e) { 
      String currentValue = (String) ((JSpinner) e.getSource()).getValue(); 
      label.setText(currentValue); 

      try { 
      Field field = Class.forName("java.awt.Color").getField(currentValue.toLowerCase()); // toLowerCase because the color fields are RED or red, not Red 
      Color color = (Color)field.get(null); 

      label.setForeground(color); 
      } catch (NoSuchFieldException e1) {   
      } catch (ClassNotFoundException e1) { 
      } catch (IllegalAccessException e1) { 
      } 
     } 
     }); 
    } 

    public JComponent getComponent(){ 
     return label; 
    } 
    } 
}