JComboBox wybór kolorów

0

Witam.
Mam do napisania aplikację,która umożliwia rysowanie okręgów (o różnych kolorach i promieniach) o środkach wskazanych kliknięciem myszy.
Kolory mają być wybierane dzięki JComboBox. Nie za bardzo wiem jak to zrobić.
Moja aplikacja na razie działa w ten sposób, że wyświetla się lista kolorów ale nie można żadnego wybrać, okrąg, który się pojawia jest w kolorze czarnym.

Proszę o pomoc.

import java.awt.EventQueue;
import java.awt.Graphics;

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.awt.Color;

import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JComboBox;

public class Mysz {

	private JFrame frame;
	private MyPanel panelRysuj;
	private int x;
	private int y;
	private int r=50;
	private boolean czyRysuj=false;
	private JTextField textField;
	JComboBox colorCombo;
	
	private class MyPanel extends JPanel implements MouseListener{
		
		MyPanel(){
			addMouseListener(this);
		}
		
		@Override
		protected void paintComponent(Graphics g){
			super.paintComponent(g);
			if(czyRysuj){
				g.drawOval(x-r, y-r, 2*r, 2*r);
			}
			
		}

		@Override
		public void mouseClicked(MouseEvent e) {
			czyRysuj=true;
			x=e.getX();
			y=e.getY();
			repaint();
			
		}

		@Override
		public void mouseEntered(MouseEvent arg0) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void mouseExited(MouseEvent arg0) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void mousePressed(MouseEvent arg0) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void mouseReleased(MouseEvent arg0) {
			// TODO Auto-generated method stub
			
		}
		
	}

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Mysz window = new Mysz();
					window.frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the application.
	 */
	public Mysz() {
		initialize();
	}

	/**
	 * Initialize the contents of the frame.
	 */
	private void initialize() {
		
		
		
		
		frame = new JFrame();
		frame.setBounds(100, 100, 450, 300);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		JPanel panel = new JPanel();
		frame.getContentPane().add(panel, BorderLayout.CENTER);		
		panel.setLayout(new BorderLayout(0, 0));
		
		JPanel panelNorth = new JPanel();
		panel.add(panelNorth, BorderLayout.NORTH);
		
		JLabel lblNewLabel = new JLabel("Promien");
		panelNorth.add(lblNewLabel);
		
		textField = new JTextField();
		textField.setText("30");
		panelNorth.add(textField);
		textField.setColumns(10);
		
		JLabel lblNewLabel_1 = new JLabel("Kolor");
		panelNorth.add(lblNewLabel_1);
		
		
		 String[] kolory = { "czarny", "czerwony ", "różowy"};
		
		JComboBox comboBox = new JComboBox(kolory);
		panelNorth.add(comboBox);
		
		
		panelRysuj = new MyPanel();
		panel.add(panelRysuj, BorderLayout.CENTER);
		
		
		
	}

}
0

Z opisu niewiele wynika.
Czy na ekranie będzie zawsze tylko jeden (żaden) okrąg?
Jeśli będzie kilka okręgów, to czy wszystkie mają taki sam kolor?

0

Odpowiadaj w postach i czytaj uważnie. Ja nie pytam jak jest, pytam jak ma być.

0

Na ekranie, po kliknięciu myszą, ma być jeden okrąg w wybranym kolorze.

0
        protected void paintComponent(Graphics g){
            super.paintComponent(g);
            if(czyRysuj){
                int index = colorCombo.getSelectedIndex(); 
                if(index == -1){ //nic nie zostało zaznaczone
                    g.setColor(Color.BLACK);
                }
                else{
                    //ustaw kolor w zależności od wartości zmiennej index
                }
                g.drawOval(x-r, y-r, 2*r, 2*r);
            }
 
        }

Takie rozwiązanie zmieni kolor nowego okręgu. Jeśli chcesz zmieniać kolor tego, który już jest narysowany, to musisz dodać listenera do JComboBoksa.

0

Podkreśla mi błąd przy : colorCombo.getSelectedItem(); i przy get.setColor(Color.BLACK);

0

Były dwie literówki, już poprawiłem.

0

Wstawiłam tą metodę w miejscu mojej nadpisanej metody paintComponent() i po uruchomieniu wyskakuje mi cała masa błędów.

0

Po pierwsze, nie wiem co napisałeś zamiast

//ustaw kolor w zależności od wartości zmiennej index

Po drugie, masz błąd w konstruktorze. Zamiast

        JComboBox comboBox = new JComboBox(kolory);
        panelNorth.add(comboBox);</cose>
napisz
```java
        colorCombo = new JComboBox(kolory);
        panelNorth.add(colorCombo);
0

Serdecznie dziękuję za pomoc. Już wszystko działa.

0

Tak przy okazji, to poczytaj o JColorChooser. Może w tej sytuacji byłby lepszym rozwiązaniem, niż wybór koloru z listy.
https://docs.oracle.com/javase/tutorial/uiswing/components/colorchooser.html

1 użytkowników online, w tym zalogowanych: 0, gości: 1