我目前正在用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"}));
发布于 2012-11-11 03:07:38
您需要以下内容来创建颜色编码的JSpinner
JSpinner用于更新颜色的ChangeListener 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 }
}
});发布于 2012-11-11 03:18:21
我个人更喜欢设置我自己的编辑器,而不是使用现有的编辑器,并希望它不会在未来崩溃。因此,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;
}
}
}https://stackoverflow.com/questions/13324987
复制相似问题