Je souhaite créer une certaine méthode qui peut m'aider à accélérer la conception graphique. Je prends le plus longtemps en utilisant setBounds
. Maintenant, je voudrais juste aller pour FlowLayout ou GridLayout, mais je n'aime pas être dépendante de ceux-ci.Comment modifier la méthode setBounds pour JComponents?
Fondamentalement, je pense à une méthode comme placeAbove
, qui place un JComponent au-dessus d'un autre composant JComponent. Ses arguments seraient le point de référence JComponent et un entier pour leur distance les uns par rapport aux autres. Je suis actuellement le succès avec ce qui suit:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class BoundBender extends JFrame {
public BoundBender() {
Container c = getContentPane();
c.setLayout(null);
JLabel l1 = new JLabel("Reference Point");
JLabel l2 = new JLabel("Above Label");
JLabel l3 = new JLabel("Below Label");
JLabel l4 = new JLabel("Before Label");
JLabel l5 = new JLabel("After Label");
c.add(l1);
l1.setBounds(170, 170, 100, 20);
c.add(l2);
placeAbove(l1, 0, l2);
c.add(l3);
placeBelow(l1, 10, l3);
c.add(l4);
placeBefore(l1, 20, l4);
c.add(l5);
placeAfter(l1, 30, l5);
setVisible(true);
setSize(500, 500);
}
public static void main (String args[]) {
BoundBender bb = new BoundBender();
bb.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void placeAbove(JComponent j, int a, JComponent k) {
int x= j.getX();
int y= j.getY();
int w= j.getWidth();
int h= j.getHeight();
y=(y-h)-a;
k.setBounds(x, y, w, h);
}
public static void placeBelow(JComponent j, int a, JComponent k) {
int x= j.getX();
int y= j.getY();
int w= j.getWidth();
int h= j.getHeight();
y=y+h+a;
k.setBounds(x, y, w, h);
}
public static void placeBefore(JComponent j, int a, JComponent k) {
int x= j.getX();
int y= j.getY();
int w= j.getWidth();
int h= j.getHeight();
x=(x-w)-a;
k.setBounds(x, y, w, h);
}
public static void placeAfter(JComponent j, int a, JComponent k) {
int x= j.getX();
int y= j.getY();
int w= j.getWidth();
int h= j.getHeight();
x=x+w+a;
k.setBounds(x, y, w, h);
}
}
Cependant, je veux qu'il soit aussi simple que l2.placeAbove(l1, 0)
, parce que ce troisième argument semble inefficace. Donc, des suggestions? Et s'il vous plaît utiliser des terminologies compréhensibles.
Java Swing a été conçu pour être utilisé avec [layout managers] (https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html). Jetez un coup d'œil au [Spring layout manager] (https://docs.oracle.com/javase/tutorial/uiswing/layout/spring.html), et voyez si vous préférez l'utiliser. –