Skalowanie buttonów

0

Witam, mam problem odnośnie tego zadania. Mam przyciski i nie mogę znaleźć rozwiązania jak zrobić aby wraz z powiększeniem okna (przez użytkownika) przyciski zwiększyły się zgodnie z wielkością okna. Pozdrawiam

import javax.swing.JButton;
import javax.swing.JFrame;

public class Problem extends JFrame{

private static int szerokosc =600;
private static int wysokosc = 600;
	
public static void main(String[] args) {
		
	Problem okno = new Problem();
	okno.setLayout(null);
		
	okno.setSize(szerokosc, wysokosc); //Długość okna oraz jego wysokość
	okno.setTitle("Problem");
		
	JButton button1 = new JButton("Pierwszy");
	JButton button2 = new JButton("Drugi");
	JButton button3 = new JButton("Trzeci");
								
	button1.setBounds(0, 0, szerokosc/2, wysokosc/2);
	okno.add(button1);
				
	button2.setBounds(szerokosc/2, 0, szerokosc/2, wysokosc/2);
	okno.add(button2);
	
	button3.setBounds(0, wysokosc/2, szerokosc, wysokosc/2);
	okno.add(button3);
	
	okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	okno.setVisible(true);

	}

}
0

Wydaje mi się że musisz użyć jakiegoś layouta np GridLayout : okno.setLayout(new GridLayout(2,2));

0

A co jeśli chcę żeby moje przyciski były innej wielkości?

0

Po to się używa layoutów, żeby się przyciski same powiększały. Wyłączyłeś layout, to musisz się sam zająć przeliczaniem. Dodaj do okna ComponentListenera i napisz metodę componentResized.

1

Rozwiązanie z użyciem layoutów.

import javax.swing.*;
import java.awt.*;
 
public class Problem extends JFrame{
    private static int szerokosc =600;
    private static int wysokosc = 600;
 
    public static void main(String[] args) {
 
        Problem okno = new Problem();
        okno.setTitle("Problem");

        JPanel top = new JPanel();
        top.setPreferredSize(new Dimension(szerokosc,wysokosc/2));
        top.setLayout(new GridLayout(1,1));
    
        JPanel bottom = new JPanel();
        bottom.setPreferredSize(new Dimension(szerokosc,wysokosc/2));
        bottom.setLayout(new GridLayout(1,2));
    
        JButton button1 = new JButton("Pierwszy");
        JButton button2 = new JButton("Drugi");
        JButton button3 = new JButton("Trzeci");
 
        top.add(button1);
        okno.add(top,BorderLayout.NORTH);

        bottom.add(button2);
        bottom.add(button3);
        okno.add(bottom,BorderLayout.CENTER);
 
        okno.pack();
        okno.setLocationRelativeTo(null);
        okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        okno.setVisible(true);
    }
}
0

To działa, dziękuję za odpowiedzi ale bardziej chodzi mi aby wszystkie komponenty tak samo się powiększały/pomniejszały i np zostały kwadratami :)

Co mogę w tej sytuacji zrobić?

0

Pomoże ktoś ? :)

1

Masz trzy wyjście:

  • nie dopuścić do zmian rozmiarów okna (setResizable(false)),
  • dodać ComponentListenera i przeliczać rozmiary,
  • zrozumieć jak działają różne layouty i stosować właściwy.
    Nie bardzo wiem co chcesz osiągnąć, może ten kod jest bliżej Twoich wymagań.
import javax.swing.*;
import java.awt.*;
 
public class Problem extends JFrame{
    private static int szerokosc =600;
    private static int wysokosc = 600;
 
    public static void main(String[] args) {
 
        Problem okno = new Problem();
        okno.setTitle("Problem");
        okno.setLayout(new GridLayout(2,1));

        JPanel top = new JPanel();
        top.setPreferredSize(new Dimension(szerokosc,wysokosc/2));
        top.setLayout(new GridLayout(1,1));
    
        JPanel bottom = new JPanel();
        bottom.setPreferredSize(new Dimension(szerokosc,wysokosc/2));
        bottom.setLayout(new GridLayout(1,2));
    
        JButton button1 = new JButton("Pierwszy");
        JButton button2 = new JButton("Drugi");
        JButton button3 = new JButton("Trzeci");
 
        top.add(button1);
        okno.add(top);

        bottom.add(button2);
        bottom.add(button3);
        okno.add(bottom);
 
        okno.pack();
        okno.setLocationRelativeTo(null);
        okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        okno.setVisible(true);
    }
}
0

O to mi chodziło, dziękuję bardzo :)

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