JPanel FlowLayout Força De Componentes Envoltório
-
22-12-2019 - |
Pergunta
Eu tenho um JPanel
que utiliza, por padrão, um FlowLayout
manager.Eu, como a vantagem de o estilo do documento FlowLayout
em que eu adicionar componentes um a um, com embaladora, mas gostaria de um componente para forçar a seleção de uma nova linha.
Eu leio se eu usasse uma BoxLayout
Eu poderia inserir uma espécie de component return key
e forçar as componentes para iniciar em uma nova linha.Eu preciso de orientação sobre a minha decisão e que é uma abordagem melhor.
Eu tenho um JLabel
e JTextField
em uma linha, e gostaria de colocar um JTextArea
embrulhado dentro de um JScrollPane
abaixo.
Solução
- Use uma combinação de
FlowLayout
eBorderLayout
.É uma boa idéia para ninho de layouts para obter o resultado desejado. - O
JLabel
e oJTextField
gostaria de ir em umJPanel
comFlowLayout
Em seguida, outro
JPanel
comBorderLayout
irá realizar o painel anterior aoNORTH
a posição, e oJTextArea
comJScrollPane
noCENTER
posição.JPanel topPanel = new JPanel(); JLabel label = new JLabel("Text Field Label"); JTextField jtf = new JTextField(20); topPanel.add(label); topPanel.add(jtf); JPanel bothPanel = new JPanel(new BorderLayout()); JTextArea jta = new JTextArea(20, 40); bothPanel.add(topPanel, BorderLayout.NORTH); bothPanel.add(new JScrollPane(jta));
Ter um olhar para Esquematizar os Componentes Dentro de um Recipiente
import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class FlowBorderDemo {
public FlowBorderDemo() {
JPanel topPanel = new JPanel();
JLabel label = new JLabel("Text Field Label");
label.setForeground(Color.white);
JTextField jtf = new JTextField(20);
topPanel.add(label);
topPanel.add(jtf);
topPanel.setBackground(Color.black);
JPanel bothPanel = new JPanel(new BorderLayout());
JTextArea jta = new JTextArea(20, 40);
JScrollPane scrollPane = new JScrollPane(jta);
scrollPane.setBorder(BorderFactory.createMatteBorder(3, 0, 0, 0, Color.GRAY));
bothPanel.add(topPanel, BorderLayout.NORTH);
bothPanel.add(scrollPane);
bothPanel.setBorder(BorderFactory.createMatteBorder(3, 8, 3, 8, Color.GRAY));
JLabel copyLabel = new JLabel("<html>©2014 peeskillet</html>");
copyLabel.setBackground(Color.LIGHT_GRAY);
copyLabel.setHorizontalAlignment(JLabel.CENTER);
bothPanel.add(copyLabel, BorderLayout.PAGE_END);
JFrame frame = new JFrame();
frame.add(bothPanel);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
UIManager.setLookAndFeel(UIManager
.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException
| IllegalAccessException
| UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
new FlowBorderDemo();
}
});
}
}