JSpinnerBug ? - ustawianie koloru nie dziala

0

Witam,

mam problem z ustawieniem koloru JSpinnera, ponizszy kod powinien dzialac lecz niestety nie dziala, w jaki inny sposob mozna ustawic kolory ?

Spinner= new JSpinner();
Spinner.setBackground(new Color(7,77,77)); //przykladowy kolor
Spinner.setForeground(new Color(0,0,222)); //przykladowy kolor
Spinner.setBounds(300, 80, 80, 30);
Spinner.setModel(new SpinnerNumberModel(2,2,2,2)); 
this.add(Spinner);
0

Zanim ustawisz kolor spróbuj:

Spinner.setOpaque(true);
0

niestety tez nie dziala, jakies inne pomysly ?

0
setForeground

public void setForeground(Color fg)

    Sets the foreground color of this component. It is up to the look and feel to honor this property, some may choose to ignore it.
0

i co mam z tym zrobic ? :)

0
  1. Polubić aktualny kolor.
  2. Nie korzystać z JSpinnera Przy pomocy JComboBox można uzyskać prawie to samo (chyba że lista wartości jest długa).
    pozdrawiam
0

niestety musze miec ustawiony kolor ;)

Spinner= new JSpinner();
Spinner.setBackground(Color.yellow);//przykladowy kolor
Spinner.setForeground(Color.black);//przykladowy kolor
Spinner.setBounds(300, 80, 80, 30);
Spinner.setModel(new SpinnerNumberModel(2,2,2,2));
this.add(Spinner);

jesli o to chodzilo to tez nie dziala, jest w ogóle mozliwe ustawienie koloru dla JSpinnera ?

0

Przecież Ci napisałem fragment oficjalnej dokumentacji Suna dotyczącej metody setForeground(fg).
It is up to the look and feel to honor this property, some may choose to ignore it.
Jakiego "wyglądu" używasz (Swing, native, Motif). Wypróbuj inne, może w jakimś "wyglądzie" kolor się zmieni.

pozdrawiam

0

Oficjalna dokumentacja=>klasa JSpinner=>How to to use Spinners=>Detecting Spinner Value Changes
pozdrawiam

0
JComponent editor=spinner.getEditor();
((JSpinner.DefaultEditor)editor).getTextField().setForeground(Color.red);

pozdrawiam

0

Możesz spróbować zmienić UI: robiąc klase dziedziczącą po BasicSpinnerUI
http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/plaf/basic/BasicSpinnerUI.html

0

Nie jest co Zorro ma na myśli, mówiąc o zmianie koloru Spinnera. Jeśli chodzi o to by zmienić kolor napisu w polu edycyjnym, to działa podany przeze mnie sposób.
pozdrawiam

0

mam na mysli zmienienie tla spinnera (bgcolor) i koloru napisu, zedaen z podanych przez Was sposobow mi nie dziala :/ uzywam follow layout

0
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;
import javax.swing.*;

public class TestSpinnera extends JFrame implements ActionListener
{
    private JSpinner spinner=null;
    //------------------------
    public static void main(String[] args)
    {
        new TestSpinnera();
    }
    //------------------------
    public TestSpinnera()
    {
        super("Test Spinnera");
        setLayout(new FlowLayout());
        spinner=new JSpinner();
        spinner.setModel(new SpinnerNumberModel(50,0,100,1));
        add(spinner);

        JButton button=new JButton("Zmień kolor");
        button.addActionListener(this);
        add(button);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        My.centruj(this);
        setVisible(true);
    }
    //------------------------
    public void actionPerformed(ActionEvent ae)
    {
        JComponent editor=spinner.getEditor();
        ((JSpinner.DefaultEditor)editor).getTextField().setForeground(Color.red);
    }
}

u mnie działa (zakomentuj My.centruj(this);)

0

zmienia sie tylko kolor tekstu, nie wiesz jak rozwiazac problem koloru tla ?

0

Przecież, to jest oczywiste.

((JSpinner.DefaultEditor)editor).getTextField().setBackground(Color.black);
0

W sumie racja. Ale UI i tak można zmienić, żeby przyciski pasowały do reszty np:

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import javax.swing.plaf.basic.BasicSpinnerUI;
import javax.swing.plaf.basic.BasicArrowButton;
import javax.swing.JButton;
import java.awt.Color;
import javax.swing.JSpinner;

public class MySpinnerUI extends BasicSpinnerUI {
	private JSpinner spinner;

	private ActionListener sp_listener;
	private MouseListener sp_mouselistener;

	private BasicArrowButton up;
	private BasicArrowButton down;

	public MySpinnerUI(JSpinner spinner) {
		this.spinner = spinner;
		this.sp_listener = new SpinnerListener();
		this.sp_mouselistener = new SpinnerMouseListener();
	}

	protected BasicArrowButton createNextButton() {
		up = new BasicArrowButton(BasicArrowButton.NORTH,Color.BLACK,Color.DARK_GRAY, Color.GREEN, Color.LIGHT_GRAY);
		up.setActionCommand("up");
		up.addActionListener(sp_listener);
		up.addMouseListener(sp_mouselistener);
		return up;
	}
	protected BasicArrowButton createPreviousButton() {
		down = new BasicArrowButton(BasicArrowButton.SOUTH,Color.BLACK,Color.DARK_GRAY, Color.GREEN, Color.LIGHT_GRAY);
		down.setActionCommand("down");
		down.addActionListener(sp_listener);
		down.addMouseListener(sp_mouselistener);
		return down;
	}
	private class SpinnerListener implements ActionListener {
		public void actionPerformed(ActionEvent e) {
			if(e.getActionCommand().equalsIgnoreCase("up")) {
				try {
					spinner.getModel().setValue(spinner.getModel().getNextValue());
				}catch(IllegalArgumentException ex) {
					//maksymalna wartosc
				}

			} else if(e.getActionCommand().equalsIgnoreCase("down")) {
				try {
					spinner.getModel().setValue(spinner.getModel().getPreviousValue());
				}catch(IllegalArgumentException ex) {
					//minimalna wartosc
				}

			}
		}
	}

	private class SpinnerMouseListener implements MouseListener {
		private Thread click;
		private boolean started = false;
		public void mousePressed(MouseEvent e) {
			if(e.getSource().equals(up)) {
				try {
					click.stop();
				}catch(Exception ex) {}
				click = new Thread(new ContinueChange(up));
				click.start();
			} else if(e.getSource().equals(down)) {
				try {
					click.stop();
				}catch(Exception ex) {}
				click = new Thread(new ContinueChange(down));
				click.start();
			}
		}

		public void mouseReleased(MouseEvent e) {
			try {
					click.stop();
			}catch(Exception ex) {}
		}

		public void mouseEntered(MouseEvent e) {}
		public void mouseExited(MouseEvent e) {}
		public void mouseClicked(MouseEvent e) {}
	}

	private class ContinueChange implements Runnable {
		private long wait = 250;
		private long wait_decr = 30; //spadek czasu oczekiwania po kliknieciu
		private BasicArrowButton button;

		public ContinueChange(BasicArrowButton button) {
			this.button = button;
		}

		public void run() {
			while(true) {
				try {
					button.doClick();
					Thread.sleep(wait);
					if(wait > 0) {
						wait -= wait_decr;
						if(wait<0) wait = 0;
					}
				}catch(InterruptedException e) {
					return;
				}
			}
		}
	}
}
import javax.swing.JFrame;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;
import javax.swing.JComponent;
import javax.swing.BorderFactory;
import java.awt.Color;

public class SpinerTest extends JFrame {
	private JSpinner spinner;
	public SpinerTest() {
		super("Spiner Test");
		this.setSize(200,60);
		this.setResizable(false);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setLayout(null);

		spinner = new JSpinner();

		spinner.setModel(new SpinnerNumberModel(50, 0 ,100 ,1));
		spinner.setBounds(5,5,50,25);


		JComponent editor=spinner.getEditor();
		((JSpinner.DefaultEditor)editor).getTextField().setBackground(Color.BLACK);
		((JSpinner.DefaultEditor)editor).getTextField().setForeground(Color.GREEN);
		((JSpinner.DefaultEditor)editor).getTextField().setBorder(BorderFactory.createLineBorder(Color.GREEN,1));
		spinner.setUI(new MySpinnerUI(spinner));

		this.add(spinner);
		this.show();
	}

	public static void main(String[] args) {
		try {
			new SpinerTest();
		}catch(Exception e) {
			System.out.println("Wystapil wyjatek:\n"+e.getClass().getCanonicalName()+":\n"+e.getCause());
		}
	}
}
0

dzieki za pomoc :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.