2017-05-09 1 views
-1

Hier ist der Code, wenn das Bild auf den Hintergrund gelegt wird, bleibt es einfach an der linken Wand hängen, egal welchen Code ich hinzufüge, um es zu bewegen. Ich habe versucht, SetLocation und SetBounds. Alles was ich tun möchte ist, das Bild nach unten links zu verschieben, aber nicht vollständig an den Wänden des Rahmens.Wie verschiebe ich ein JLabel, das feststeckt und sich nicht bewegt?

JFrame window = new JFrame(); 
window.setSize(800,480); 
window.setTitle("Battle"); 
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
window.setLayout(new BorderLayout()); 
JLabel background = new JLabel(); 
ImageIcon icon = new ImageIcon("background2.png");  
background.setIcon(icon); 
background.setLayout(new BorderLayout()); 
window.setContentPane(background); 
JLabel p1 = new JLabel(); 
p1 = a.getImage(); 
background.add(p1); 
p1.setLocation(500,500); 
p1.setVisible(true); 
window.setVisible(true); 
+0

Border seine Arbeit tut. Ihre Aufrufe von setLocation bedeuten nichts, da BorderLayout wie jeder Layoutmanager entscheidet, wo die untergeordneten Komponenten platziert werden. Sie müssen wahrscheinlich lernen, wie man [GridBagLayout] (http://docs.oracle.com/javase/8/docs/api/java/awt/GridBagLayout.html) verwendet, aber zuerst wollen Sie lernen, wie LayoutManager funktionieren im Allgemeinen] (https://docs.oracle.com/javase/tutorial/uiswing/layout/). – VGR

Antwort

3
window.setLayout(new BorderLayout()); 
... 
window.setContentPane(background); 

Die erste Aussage macht nichts, weil die zweite Anweisung den Inhaltsbereich des Rahmens ersetzt, wird den Layout-Manager, was Layout-Manager Sie für die „Hintergrund“ Komponente eingestellt werden.

Alles, was ich tun möchte, ist das Bild nach links unten bewegen,

gut Sie die Layout-Manager auf einen Border so eingestellt, dass Sie die Vorteile der Border nehmen müssen. Lesen Sie den Abschnitt aus dem Swing-Tutorial unter How to Use BorderLayout für Arbeitsbeispiele.

Das erste, was Sie tun müssen, ist die richtige Einschränkung geben Sie die Komponente am unteren Rand angezeigt haben:

//background.add(p1); // defaults to BorderLayout.CENTER if no constraint is specified 
background.add(p1, BorderLayout.PAGE_END); 

-Test dieses und das Bild am Ende sein wird, aber es ist immer noch zentriert.

So, jetzt müssen Sie auf dem Etikett eine Eigenschaft setzen, das Etikett zu sagen, selbst zu malen links ausgerichtet:

label.setHorizontalAlignment(JLabel.LEFT); 

nicht vollständig an den Wänden des Rahmens

Wenn Sie benötigen Sie zusätzlichen Platz um das Bild, dann können Sie eine Border auf dem Etikett hinzufügen. Mit dem obigen Link lesen Sie den Abschnitt aus dem Tutorial auf How to Use Borders. Sie können einen EmptyBorder verwenden, um den zusätzlichen Platz zu geben.

1

Eine Möglichkeit, dies zu tun, wäre extra „linkes Feld“ Container hinzuzufügen, damit wir Ihr Etikett auf der linken und unteren

public static void main(String[] args) { 
    JFrame window = new JFrame(); 
    window.setSize(800, 480); 
    window.setTitle("Battle"); 
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    JLabel background = new JLabel(); 
    background.setBackground(Color.gray); 
    background.setLayout(new BorderLayout()); 
    background.setOpaque(true); 
    window.setContentPane(background); 

    JPanel leftPanel = new JPanel(); 
    leftPanel.setLayout(new BorderLayout()); 
    background.add(leftPanel, BorderLayout.WEST); // stick our left side bard to the left side of frame 

    JLabel p1 = new JLabel(); 
    p1.setText("Im here"); 
    p1.setLocation(500, 500); 
    p1.setVisible(true); 
    p1.setBackground(Color.black); 
    p1.setOpaque(true); 
    leftPanel.add(p1, BorderLayout.SOUTH); // add our label to the bottom 
    window.setVisible(true); 
} 

Ergebnisse positionieren: enter image description here

Verwandte Themen