Czy istnieje prosty sposób blokowania współczynnika kształtu komponentu GridLayout w Java Swing? Czy powinno to być zrobione na JPanelu zawierającym ten układ?Jak zablokować współczynnik kształtu gridLayout w Javie?
5
A
Odpowiedz
7
GridLayout
skutecznie ignoruje komponentu preferowany rozmiar, ale można kontrolować aspect ratio czegokolwiek jest zasysane paintComponent()
, jak pokazano w tym example. Wygenerowany kształt pozostaje okrągły (aspekt 1: 1), natomiast (prawie) wypełnia go w najwęższym wymiarze. Zmień rozmiar ramki, aby zobaczyć efekt.
Dodatek: Na przykład dodałem N * N
wystąpienia CirclePanel
do GridLayout
poniżej.
import java.awt.*;
import java.awt.event.*;
import java.util.Random;
import javax.swing.*;
/**
* @see https://stackoverflow.com/a/9858355/230513
* @see https://stackoverflow.com/a/3538279/230513
*/
public class SwingPaint {
private static final int N = 4;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
frame.setLayout(new GridLayout(N, N));
for (int i = 0; i < N * N; i++) {
frame.add(new CirclePanel());
}
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
});
}
private static class CirclePanel extends JPanel {
private static final Random r = new Random();
public CirclePanel() {
this.setPreferredSize(new Dimension(80, 80));
this.setForeground(new Color(r.nextInt()));
this.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
CirclePanel.this.update();
}
});
}
public void update() {
this.setForeground(new Color(r.nextInt()));
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Dimension size = this.getSize();
int d = Math.min(size.width, size.height) - 10;
int x = (size.width - d)/2;
int y = (size.height - d)/2;
g.fillOval(x, y, d, d);
g.setColor(Color.blue);
g.drawOval(x, y, d, d);
}
}
}
Powiązane problemy
- 1. Jednostki rzutni, zachowując współczynnik kształtu?
- 2. iOS zachowują współczynnik kształtu UIImageView, ale szerokość wypełnienia
- 3. Ukryj wiersz w GridLayout
- 4. jak zablokować wywołanie ajax (chcę to zablokować)
- 5. Jak obliczyć współczynnik klikalności
- 6. Jak zablokować w pojedynczym szkielecie?
- 7. Użyj GridLayout w Scrolled Composite
- 8. matplotlib (tej samej długości jednostki): Z 'równej Współczynnik kształtu osi jest równa x i y
- 9. Wiele menedżerów układów w Javie
- 10. Resize obrazu przy zachowaniu proporcji w Javie
- 11. Zmiana domyślnego kształtu prostokąta kształtu UII
- 12. C#: Jak obliczyć współczynnik proporcji
- 13. Jak uzyskać współczynnik skali urządzenia?
- 14. jak zablokować zawartość metody
- 15. Android GridLayout przelewał ekran
- 16. GridLayout Szerokość kolumny
- 17. Zapisywanie działki o danym współczynniku kształtu
- 18. GridLayout vs TableLayout
- 19. Współczynnik proporcji Autolayout dla UIImageView/UIView
- 20. Tworzenie kształtu w C++
- 21. Zmiana rozmiaru UIImage ze współczynnikiem kształtu?
- 22. Jak uzyskać tekst przycisku w Javie?
- 23. Jak utworzyć edytor kształtu WPF?
- 24. Wykryj współczynnik kompresji JPG?
- 25. Jak ustawić tło mojego kształtu w xml?
- 26. Ustaw kolumn_kolumn i layout_row w GridLayout programowo
- 27. SetGravity dla GridLayout nie działa
- 28. jak TRIM zablokować dysk SSD?
- 29. Jak "inteligentnie zmienić rozmiar" wyświetlanego obrazu na oryginalny współczynnik proporcji
- 30. jak zablokować akcję asp.net mvc?
Musi być coś, dla których nie ma żadnego przykładu, zastanawiam !!!! :-) –
Jestem fanem [sscce] (http://sscce.org/). :-) – trashgod
OK, więc rzeczy powinny być wykonane w paintComponent. Bawiłem się, wciąż nie rozwiązałem problemu. W tej chwili patrzę na umieszczenie mojej siatki w pośredniku JPanel (JPanel -> pośrednik JPanel -> GridLayout). Próbuję kontrolować rozmiar tego pośrednika JPanel w paintComponent z głównego JPanel. Jak się z tym czujesz ? Jeszcze się nie udało ... – Jerome