首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSpinner文本颜色

JSpinner文本颜色
EN

Stack Overflow用户
提问于 2012-11-11 02:43:06
回答 2查看 1.6K关注 0票数 1

我目前正在用NetBeans创建一个图形用户界面,我有一个包含颜色列表的JSpinner,但我不确定如何使文本成为每种颜色的对应颜色。

即-红色(应为红色,等等)

以下是到目前为止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"}));

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-11 03:07:38

您需要以下内容来创建颜色编码的JSpinner

  1. 当组件值更改时,JSpinner用于更新颜色的ChangeListener
  2. String值转换为颜色。

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

代码语言:javascript
复制
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 }
   }
});
票数 4
EN

Stack Overflow用户

发布于 2012-11-11 03:18:21

我个人更喜欢设置我自己的编辑器,而不是使用现有的编辑器,并希望它不会在未来崩溃。因此,Reimeus代码的略微修改版本

代码语言:javascript
复制
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;
    }
  }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13324987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档