【问题标题】:JSpinner text colorJSpinner 文字颜色
【发布时间】:2012-11-10 18:43:06
【问题描述】:

我目前正在 NetBeans 中创建一个 GUI,并且我有一个包含颜色列表的 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"}));

【问题讨论】:

    标签: java swing netbeans colors jspinner


    【解决方案1】:

    您需要以下内容来制作颜色编码的JSpinner

    1. ChangeListener 用于 JSpinner 在组件值更改时更新颜色

    2. String 值转换为颜色。

    微调器中只使用了一个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 }
       }
    });
    

    【讨论】:

    • 嗯嗯好的。非常感谢您的帮助!
    【解决方案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;
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-02-16
      • 2010-11-27
      • 1970-01-01
      • 2023-03-05
      • 2016-10-16
      • 1970-01-01
      • 1970-01-01
      • 2011-08-17
      • 2014-08-30
      相关资源
      最近更新 更多