Je suis nouveau et j'apprends JFrame actuellement et je rencontre un problème avec l'alignement de ma ComboBox, des cases à cocher et des boutons. Les auditeurs ne sont pas encore connectés et ce n'est qu'un test pour voir s'il est correctement aligné. Ma question est pourquoi la fonction d'alignement ne semble pas fonctionner? Je veux que la zone de liste déroulante soit en haut, les cases à cocher au milieu et les boutons en bas. entrez la description de l'image ici

import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ItemListener;
import java.awt.event.ItemEvent;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JCheckBox;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.SwingConstants;

public class CheckBoxFrame extends JFrame 
{

private final JComboBox<String> colorComboBox; 
private final JCheckBox backgroundColorCheckBox; 
private final JCheckBox foregroundColorCheckBox; 
private final JButton okButton;
private final JButton cancelButton;

private static final String[] color =
{"Red", "Blue", "Green", "Purple"};

public CheckBoxFrame()
{
  super("ColorSelect");
  setLayout(new FlowLayout());


  colorComboBox = new JComboBox<String>(color);
  colorComboBox.setAlignmentX(SwingConstants.TOP);
  add(colorComboBox);


  backgroundColorCheckBox = new JCheckBox("Background"); 
  foregroundColorCheckBox = new JCheckBox("Foreground"); 
  foregroundColorCheckBox.setVerticalAlignment(SwingConstants.CENTER);
  backgroundColorCheckBox.setVerticalAlignment(SwingConstants.CENTER);
  add(backgroundColorCheckBox); // add bold checkbox to JFrame
  add(foregroundColorCheckBox); // add italic checkbox to JFrame

  okButton = new JButton("Ok");
  cancelButton = new JButton("Cancel");
  okButton.setVerticalAlignment(SwingConstants.BOTTOM);
  cancelButton.setVerticalAlignment(SwingConstants.BOTTOM);
  add(okButton);
  add(cancelButton);


  // register listeners for JCheckBoxes
  CheckBoxHandler handler = new CheckBoxHandler();
  backgroundColorCheckBox.addItemListener(handler);
  foregroundColorCheckBox.addItemListener(handler);
  } 


private class CheckBoxHandler implements ItemListener 
{
  // respond to checkbox events
  @Override
  public void itemStateChanged(ItemEvent event)
  {

  } 
 }
} // end class CheckBoxFrame
0
Michael Fogarty 3 avril 2017 à 01:34

2 réponses

Meilleure réponse
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ItemListener;
import java.awt.event.ItemEvent;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JCheckBox;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.SwingConstants;

public class CheckBoxFrame extends JFrame 
{

private final JComboBox<String> colorComboBox; 
private final JCheckBox backgroundColorCheckBox; 
private final JCheckBox foregroundColorCheckBox; 
private final JButton okButton;
private final JButton cancelButton;

private static final String[] color = {"Red", "Blue", "Green", "Purple"};

public CheckBoxFrame()
{
  super("ColorSelect");
  setLayout(new GridBagLayout());

  GridBagConstraints c = new GridBagConstraints();
  colorComboBox = new JComboBox<String>(color);
  c.fill = GridBagConstraints.HORIZONTAL;
  c.gridx = 0;
  c.gridy = 0;
  c.gridwidth = 2;
  add(colorComboBox, c);


  backgroundColorCheckBox = new JCheckBox("Background"); 
  c.fill = GridBagConstraints.HORIZONTAL;
  c.gridx = 0;
  c.gridy = 1;
  c.gridwidth = 1;
  add(backgroundColorCheckBox, c); // add bold checkbox to JFrame

  foregroundColorCheckBox = new JCheckBox("Foreground");
  c.fill = GridBagConstraints.HORIZONTAL;
  c.gridx = 1;
  c.gridy = 1;
  c.gridwidth = 1;
  add(foregroundColorCheckBox, c); // add italic checkbox to JFrame

  okButton = new JButton("Ok");
  c.fill = GridBagConstraints.HORIZONTAL;
  c.gridx = 0;
  c.gridy = 2;
  c.gridwidth = 1;
  add(okButton, c);

  cancelButton = new JButton("Cancel");
  c.fill = GridBagConstraints.HORIZONTAL;
  c.gridx = 1;
  c.gridy = 2;
  c.gridwidth = 1;
  add(cancelButton, c);


  // register listeners for JCheckBoxes
  CheckBoxHandler handler = new CheckBoxHandler();
  backgroundColorCheckBox.addItemListener(handler);
  foregroundColorCheckBox.addItemListener(handler);
  } 


private class CheckBoxHandler implements ItemListener 
{
  // respond to checkbox events
  @Override
  public void itemStateChanged(ItemEvent event)
  {

  } 
 }
} // end class CheckBoxFrame
1
jmhage 2 avril 2017 à 22:53

À partir de JavaDocs pour {{X0 }}

Définit l'alignement vertical de l'icône et du texte.

Cela change la façon dont les propriétés icon et text sont disposées DANS le contexte du composant.

setVerticalAlignment n'affectera pas la disposition du composant dans le conteneur.

Pour modifier la disposition des composants dans le conteneur, vous devrez changer le gestionnaire de disposition, voir Leçon: Disposition des composants dans un conteneur

En fonction de vos besoins, vous pouvez y parvenir de plusieurs manières.

Vous pouvez utiliser un GridLayout, dont tous les composants d'une ligne individuelle sont enveloppés dans leur propre JPanel et ce panneau ajouté au conteneur principal.

Vous pouvez également utiliser un GridBagLayout, qui, bien que plus complexe, est également plus flexible

1
MadProgrammer 2 avril 2017 à 22:39