Rysowanie etykiet, a ich rozkład

0

Cześć, mam pewien problem z rozkładem
Wymodziłem taki kod:

	JLabel kolor;
	Color[] colors = {Color.BLACK, Color.blue, Color.cyan, Color.gray, Color.GREEN, Color.orange, Color.red, Color.YELLOW, Color.PINK};
	JPanel kolory = new JPanel(new FlowLayout());
	for(int i = 0; i<9; i++){
		
		kolor = new Kolor(colors[i]);
		kolory.add(kolor);
		kolory.setLayout(new FlowLayout());
	}

import java.awt.*;
import javax.swing.JLabel;

public class Kolor extends JLabel{

Color kolor;
public Kolor(Color name){
	this.kolor = name;
	setBackground(Color.orange);
}

public void paintComponent(Graphics g) {

	super.paintComponent(g);

	   g.setColor(kolor);
           g.fillOval(0, 0, 20, 20);
	   g.setColor(Color.BLACK);
	   g.drawOval(0, 0, 20, 20);
   
}
}

To czego bym oczekiwał to 9 kół ułożonych w jednym pasku jak zakłada FlowLayout. Efekt jest inny - wszystkie koła się na siebie nakładają :/
Domyślam się, że to przez sposób w jakie je rysuje, ale nie wiem jak to zrobić inaczej.
Proszę o jakieś podpowiedzi :)

0

Nie wiem tylko po co ten pomarańczowy background :)
FlowLayout jest domyślny dla JPanel dlatego nie musisz go stricte definiować (tym bardziej w każdej iteracji)

import java.awt.*;
import javax.swing.JLabel;

public class Kolor extends JLabel {

	Color kolor;

	public Kolor(Color name) {
		this.kolor = name;
		setBackground(Color.orange);
		this.setPreferredSize(new Dimension(30, 30));
		this.setOpaque(true);
	}

	public void paintComponent(Graphics g) {

		super.paintComponent(g);

		g.setColor(kolor);
		g.fillOval(0, 0, 20, 20);
		g.setColor(Color.BLACK);
		g.drawOval(0, 0, 20, 20);

	}
}
import java.awt.Color;
import java.awt.FlowLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Test {

	public static void main(String[] args) {
		JFrame frame = new JFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		JLabel kolor;
		Color[] colors = { Color.BLACK, Color.blue, Color.cyan, Color.gray,
				Color.GREEN, Color.orange, Color.red, Color.YELLOW, Color.PINK };
		JPanel kolory = new JPanel();
		for (int i = 0; i < 9; i++) {
			kolor = new Kolor(colors[i]);
			kolory.add(kolor);
		}
		
		frame.getContentPane().add(kolory);
		frame.pack();
		frame.setVisible(true);
	}

}
0

dzięki :)
Pare linijek było zbędnych, między innymi pomarańczowy border bo kombinowałem jak koń pod górkę, a rozwiązanie było takie proste :)

0

A mam jeszcze jedno pytanie. Chcę za pomocą MouseListenera dodać akcje do przycisków. Jak się do nich odwołać skoro wszystkie mają tą samą nazwę ?

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