wysrodkowanie w gui

0

Witajcie,

Mam mały prblem z javą. Chciałbym dowiedzieć się w jaki sposób zrobić tak aby logo które jest rysowane w gui(logo to czarno niebieskie koło) wyswietlalo sie na srodku okna. Dodatkowo logo zmienia swoją wielkosc w zaleznosci od podanej srednicy przez uzytkownika w Oknie dialogowym. Chcialbym aby zawsze wyswietlalo sie to kolo na srodku.

Dziekuje wam za pomoc.
Pozdrawiam

0

Klasa Screen - pobierasz wymiary ekranu.
Obliczasz środek
Umieszczasz logo.

0

Nie ma klasy Screen, robi sie to tak: Tooklkit.getDefaultToolkit().getScreenSize(), co zwraca obiekt typu Dimension. To raz.
A dwa, ze autor watku nie pytal jak narysowac cos na srodku ekranu, tylko na srodku okna, ktore moze byc gdziekolwiek. W tym przypadku (kod rysuje tylko kolo, sam zmienisz na logo):

gdzies w metodzie paintComponent()
// srednica podana przez uzytkownika
int diagonal = ...;

int windowWidth = okno.getWidth();
int windowHeight = okno.getHeight();

// obiekt typu Graphics, podany jako parametr do paintComponent()
g.setColor(Color.RED);
g.fillOval((windowWidth - diagonal) / 2, (windowHeight - diagonal) / 2, diagonal, diagonal);
0

Mam zbliżone pytanie.
Jak wstawić JLabel na środku panelu?
Tak, aby od góry było tyle samo miejsca, co z dołu i z lewej było tyle samo, co z prawej.
Jeszcze chciałbym, aby etykieta pozostawała na środku, gdy użytkownik zmieni rozmiar okna.
Z wyrównanie góra-dół można poradzić sobie za pomocą BorderLayout i opcji CENTER, ale jak to zrobić z lewo-prawo?

0

A jakbys wstawil w CENTER panel, ktory ma FlowLayout, a w nim by byla ta labelka? Wydaje sie ze powinno pojsc i jest najlatwiejsze.

0
eciepecie napisał(a)

Nie ma klasy Screen, robi sie to tak: Tooklkit.getDefaultToolkit().getScreenSize(), co zwraca obiekt typu Dimension. To raz.
A dwa, ze autor watku nie pytal jak narysowac cos na srodku ekranu, tylko na srodku okna, ktore moze byc gdziekolwiek. W tym przypadku (kod rysuje tylko kolo, sam zmienisz na logo):

gdzies w metodzie paintComponent()
// srednica podana przez uzytkownika
int diagonal = ...;

int windowWidth = okno.getWidth();
int windowHeight = okno.getHeight();

// obiekt typu Graphics, podany jako parametr do paintComponent()
g.setColor(Color.RED);
g.fillOval((windowWidth - diagonal) / 2, (windowHeight - diagonal) / 2, diagonal, diagonal);

eciepecie dziekuje o to mi chodziło hula jak należy :)
Pozdrawiam

0

Niestety mimo rozlicznych prób nie byłem zadowolony z połączenia FlowLayout i BorderLayout. Udało mi się to zrobić z FlowLayout i BoxLayout, ale można to zrobić używając tylko BoxLayout, co przedstawia poniższy kod (może się komuś przyda.

public class CenterTest2 extends JFrame {

	private void makeAndShowGUI() {
		JLabel label = new JLabel("test");
		
		JPanel panel = new JPanel();
		BoxLayout layout = new BoxLayout(panel, BoxLayout.X_AXIS); /* Dla Y_AXIS trzeba użyc label.setAlignmentX(Component.CENTER_ALIGNMENT) oraz Box.createVerticalGlue */
		panel.setLayout(layout);

		panel.add(Box.createHorizontalGlue());
		panel.add(label);
		panel.add(Box.createHorizontalGlue());

		getContentPane().add(panel);

		setPreferredSize(new Dimension(500, 500));

		/* Do debugowania */
		label.setBorder(BorderFactory.createEtchedBorder(Color.RED, Color.RED));
		panel.setBorder(BorderFactory.createEtchedBorder(Color.BLUE, Color.BLUE));

		pack();
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
	}

	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				CenterTest2 center = new CenterTest2();
				center.makeAndShowGUI();
			}
		});
	}
}

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