2017-12-08 13 views
0

Ich versuche, JButton und JTextArea nebeneinander in der unteren Mitte meines Codes auszurichten. Ich folgte ein paar Tutorials und kam zu diesem Punkt. Wenn ich mein Programm ausführe, sind der Textbereich und die Schaltfläche weiterhin oben ausgerichtet. Hilfe!Java Ausrichtungsschaltflächen, Beschriftungen und Textfelder

import java.awt.BorderLayout; 
import java.awt.FlowLayout; 

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.*; 


public class Main extends JFrame implements ActionListener{ 

JPanel panel = new JPanel(); 
JButton button = new JButton("Confirm!"); 
JTextArea text = new JTextArea(1, 20); 
public Main() { 
    super("Battleship!"); 
    setLayout(new FlowLayout()); 
    button.addActionListener(this); 
    setSize(600, 500); 
    setResizable(true); 
    button.setLayout(new FlowLayout(FlowLayout.CENTER)); 
    text.setLayout(new FlowLayout(FlowLayout.CENTER)); 
    panel.add(text, BorderLayout.SOUTH); 
    panel.add(button, BorderLayout.SOUTH); 
    add(panel); 

    setVisible(true); 
} 
public static void main(String[] args) { 
    new Main(); 
} 
@Override 
public void actionPerformed(ActionEvent e) { 
    button.setText(text.getText()); 
} 

} 
+2

'BorderLayout' kann nur verwalten eine einzelne Komponente an einer der 5 verfügbaren Positionen. Eine bessere Lösung könnte die Verwendung eines flexibleren Layout-Managers wie "GridBagLayout" sein. – MadProgrammer

+0

Eine weitere großartige Option ist die JavaFX-Bibliothek. Keine Eigenschaft für Ihr Problem, aber ich liebe die JavaFX-Bibliothek. –

+0

@JacobB. * "Aber ich liebe die JavaFX-Bibliothek" * Das ist keine Entschuldigung für die Empfehlung einer off-topic API. –

Antwort

1

Beachten Sie die Hinweise in den Code-Kommentaren.

import java.awt.*; 
import javax.swing.*; 

public class MainLayout extends JFrame { 

    // A panel defaults to flow layout. Use the default 
    JPanel panel = new JPanel(); 
    JButton button = new JButton("Confirm!"); 
    JTextArea text = new JTextArea(1, 20); 

    public MainLayout() { 
     super("Battleship!"); 
     //setLayout(new FlowLayout()); // use the default border layout 
     setSize(600, 500); // should be packed after components added. 
     //setResizable(true); // this is the default 
     /* Don't set layouts on things like buttons or text areas 
     This is only useful for containers to which we add other 
     components, and it is rarely, if ever, useful to add components 
     to these types of GUI elements. */ 
     //button.setLayout(new FlowLayout(FlowLayout.CENTER)); 
     // text.setLayout(new FlowLayout(FlowLayout.CENTER)); 

     /* No need for layout constraints when adding these to 
     a flow layout */ 
     //panel.add(text, BorderLayout.SOUTH); 
     panel.add(text); 
     //panel.add(button, BorderLayout.SOUTH); 
     panel.add(button); 

     // NOW we need the constraint! 
     add(panel, BorderLayout.PAGE_END); 

     setVisible(true); 
    } 

    public static void main(String[] args) { 
     /* Swing/AWT GUIs should be started on the EDT. 
     Left as an exercise for the reader */ 
     new MainLayout(); 
    } 
} 
+0

Bitte [akzeptieren Sie die Antwort] (http://meta.stackexchange.com/a/5235/155831), wenn dies zur Lösung des Problems beigetragen hat. –

0

Es gibt keine Notwendigkeit, jeden Flow-Layout-Taste oder den Text Einstellung für in der Mitte platzieren, da Panel standardmäßig „Flow Center“ hat, die die Komponenten in der Mitte platzieren wird Und Rahmen hat standardmäßig „Border“
Um die Schaltfläche und Textbereich an der Unterseite zu platzieren, müssen Sie nur beide im Panel hinzufügen (was Sie bereits getan) und fügen Sie dann Panel zu Frame mit Parameter als BorderLayout.SOUTH Seee der modifizierte Code darunter funktioniert wie pro Ihre benötigt

import java.awt.BorderLayout; 
import java.awt.FlowLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.*; 
public class Main extends JFrame implements ActionListener 
{ 
     JPanel panel = new JPanel(); 
     JButton button = new JButton("Confirm!"); 
     JTextArea text = new JTextArea(1, 20); 
     public Main() 
     { 
      super("Battleship!"); 
      button.addActionListener(this); 
      setSize(600, 500); 
      setResizable(true); 
      panel.add(text); 
      panel.add(button); 
      add(panel, BorderLayout.SOUTH); 
      setVisible(true); 
     } 
     public static void main(String[] args) 
     { 
      new Main(); 
     } 
     @Override public void actionPerformed(ActionEvent e) 
     { 
      button.setText(text.getText()); 
     } 
} 
Verwandte Themen