tutorial tipos son manager los fillers cuáles borderlayout java swing jframe jpanel layout-manager

tipos - swing fillers java



¿Cómo organizo JPanels de arriba a abajo? (3)

Actualmente estoy estudiando Java por mi cuenta. Estoy aprendiendo la programación de la interfaz gráfica de usuario (GUI).

Quiero que JPanel s se JPanel de arriba abajo en un JFrame primer lugar, tengo un JLabel agregado al primer JPanel . El segundo JPanel tiene 5 JRadioButtions . El tercer JPanel tiene un JButton y un JLabel .

Cuando se presiona JLabel , JLabel en el 3er. JPanel muestra algo de texto.

BoxLayout ( BoxLayout.X_AXIS ) para todos los JPanels y agregué los 3 de ellos en un JFrame que tiene FlowLayout() . Aquí hay un pequeño fragmento de código:

class GUI extends JFrame implements ActionListener { JPanel pan1,pan2,pan3; //3 JPanels JRadioButton rad1,rad2,rad3,rad4,rad5; //5 RadioButtons JButton button; //A JButton JLabel label; //A JLabel public GUI(String header) { super(header); setLayout(new FlowLayout()); //set FlowLayout to JFrame setBounds(350,325,600,125); setResizable(false); creator(); adder(); commander(); add(pan1); add(pan2); add(pan3); //Add all 3 panels to JFrame } private void adder() { pan1.setLayout(new BoxLayout(pan1,BoxLayout.X_AXIS)); pan2.setLayout(new BoxLayout(pan2,BoxLayout.X_AXIS)); pan3.setLayout(new BoxLayout(pan3,BoxLayout.X_AXIS)); //Layout for all 3 JPanels pan1.add(new JLabel("Choose a Security Level")); ButtonGroup group=new ButtonGroup(); group.add(rad1); group.add(rad2); group.add(rad3); group.add(rad4); group.add(rad5); pan2.add(rad1); pan2.add(rad2); pan2.add(rad3); pan2.add(rad4); pan2.add(rad5); pan3.add(button); pan3.add(label); } private void creator() { pan1=new JPanel(); pan2=new JPanel(); pan3=new JPanel(); rad1=new JRadioButton("Security Level 1"); rad2=new JRadioButton("Security Level 2"); rad3=new JRadioButton("Security Level 3"); rad4=new JRadioButton("Security Level 4"); rad5=new JRadioButton("Security Level 5"); button=new JButton("Move On"); label=new JLabel(); } private void commander() { rad1.addActionListener(this); rad2.addActionListener(this); rad3.addActionListener(this); rad4.addActionListener(this); rad5.addActionListener(this); rad1.setActionCommand("radio1"); rad2.setActionCommand("radio2"); rad3.setActionCommand("radio3"); rad4.setActionCommand("radio4"); rad5.setActionCommand("radio5"); button.addActionListener(this); } public void actionPerformed(ActionEvent evt) { //When button is pressed,the text in label changes if(evt.getActionCommand().equals("radio1")) label.setText("Very Easy to bypass"); else if(evt.getActionCommand().equals("radio2")) label.setText("Easy to bypass"); else if(evt.getActionCommand().equals("radio3")) label.setText("Can bypass Sometimes"); else if(evt.getActionCommand().equals("radio4")) label.setText("Hard to bypass"); else if(evt.getActionCommand().equals("radio5")) label.setText("Very Hard to bypass"); else { //Code here } repaint(); //More code here.... } }

Este es el resultado que recibo cuando selecciono el primer botón de radio (Olvidar el color verde):

Quiero que el texto "Muy fácil de derivación" se coloque sobre el botón "Mover" y debajo de todos los JRadioButtons . Puedo aumentar el tamaño del JFrame para que haya suficiente espacio. Mis preguntas son:

  • ¿Qué diseño debería usar para lograr esto?
  • ¿Debería aplicarse este diseño solo para JFrame o para los 3 JPanels ?

debes usar GridLayout

Es muy fácil de usar, solo agrégalo así. Cuida los comandos de importación. :)

JFrame frame = new JFrame(new GridLayout(3,5));


cuando llamas método add de jframe, también puedes dar una posición específica a tu panel en frame

Me gusta esto:

JPanel pan1,pan2,pan3; //3 JPanels JRadioButton rad1,rad2,rad3,rad4,rad5; //5 RadioButtons JButton button; //A JButton JLabel label; //A JLabel public GUI(String header) { super(header); setLayout(new FlowLayout()); //set FlowLayout to JFrame setBounds(350,325,600,125); setResizable(false); creator(); adder(); commander(); add(pan1,BorderLayout.NORTH); add(pan2,BorderLayout.CENTER); add(pan3,,BorderLayout.SOUTH); //Add all panels to JFrame }

buena suerte


Use GridLayout

GridLayout layout = new GridLayout(0, 1, 0, 5); setLayout(layout);

Lo que haría para agregar 5 JPanels:

import java.awt.GridLayout; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class PanelAdd extends JFrame { JPanel [] panels ; public PanelAdd() { GridLayout layout = new GridLayout(0, 1, 0, 5); setLayout(layout); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setSize(400, 350); } public static void main(String [] args) { PanelAdd add = new PanelAdd(); add.addPanels(); add.setVisible(true); } private void addPanels() { panels = new JPanel[5]; for (int i = 0 ; i < panels.length ; i++) { panels[i] = new JPanel(); panels[i].add(new JLabel("This Is Panel "+i)); add(panels[i]); } } }

En este ejemplo, hice una matriz de 5 JPanels y los agregué a través de un bucle. GridLayout para el trabajo.

Esto es solo una pista para tu respuesta