0

这是它的输出:

这是它的输出:

我想对齐最左边的“Imprimante : MonImprimante”以及 3 个复选框。

您可以通过使用 ctrl-f 搜索 *** 找到与我想要对齐的内容相关的代码

这是我的代码:`

package gui;

import java.awt.BorderLayout;
import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JSlider;

public class ImprimanteWindow extends JFrame{

   //Declares the panels used to place the controls.
private JPanel JPanelBtn;
private JPanel JPanelChk;
private JPanel JPanelRad;
private JPanel JPanelDrpChk;
private JPanel JPanelWrap;
private JPanel JPanelSuperWrap;
private String[] QltImpression = { "Haute", "Medium", "Bas"};

public ImprimanteWindow(){


    //Initialise the panels
    JPanelBtn = new JPanel(new GridLayout(4,1, 10, 10));
    JPanelChk = new JPanel(new GridLayout(3,1));
    JPanelRad = new JPanel(new GridLayout(3,1));
    JPanelDrpChk = new JPanel();
    JPanelWrap = new JPanel(); //used to put the other panels inside
    JPanelSuperWrap = new JPanel();  //used to put everything in 1 big panel

            //Initialise the buttons and add them to the button Panel
    JPanelBtn.add(new JButton("Ok"));
    JPanelBtn.add(new JButton("Annuler"));
    JPanelBtn.add(new JButton("Paramètre"));
    JPanelBtn.add(new JButton("Aide"));
    this.add("East", JPanelBtn);

            //***I want to align this to the far left 
            //adds the check boxes to the checkbox panel
    JPanelChk.add(new JCheckBox("Image"));
    JPanelChk.add(new JCheckBox("Texte"));
    JPanelChk.add(new JCheckBox("Code"));

            ////adds the radio buttons to the radiobutton panel
    JPanelRad.add(new JRadioButton("Selection"));
    JPanelRad.add(new JRadioButton("Tous"));
    JPanelRad.add(new JRadioButton("Applet"));

            //***I want to align this to the far left 
            //adds the label to the top section of the panel
    JPanelSuperWrap.add(new JLabel("Imprimante : MonImprimante"));

            //adds the 2 panels and the slider to the middle section
    JPanelWrap.add(JPanelChk);
    JPanelWrap.add(JPanelRad);
    JPanelWrap.add(new JSlider());
    JPanelSuperWrap.add(JPanelWrap);    

            //adds a label, a combobox and a checkbox to the bottom.
    JPanelDrpChk.add(new JLabel("Qualite de l'impression :"));
    JPanelDrpChk.add(new JComboBox(QltImpression));
    JPanelDrpChk.add(new JCheckBox("Imprimer dans un fichier"));
    JPanelSuperWrap.add(JPanelDrpChk);
    this.add(JPanelSuperWrap);

    this.pack();

    this.setSize(500,170);
    this.setVisible(true);
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    this.validate();
}


public static void main(String args[]){
    ImprimanteWindow gui = new ImprimanteWindow();

}
}`

将控件放置在我的 gui 上的任何帮助都将得到极大的帮助!非常感谢你们!

4

3 回答 3

1

使用具有硬设置布局的嵌套面板和没有设置的包装器会使生活变得更加困难。如果您要在微观级别上进行显式控制并有特定的显示要求(例如您的标签盒),您应该在JPanelWrap和中具有显式布局JPanelSuperWrap

此外,使用可以更好地传达您的意图的布局。当BoxLayout更好地表达您的意图时,为什么您在嵌套组件中使用 3x1 GridLayout ?您正在以这种方式执行与 HTML 嵌套布局等效的 Swing。您可以使内部面板使用 Boxes 和 Filler,因为它们是简单的列,并使用 2x2 GridBagLayout for ,占用 2 行。<table>JPanelSuperWrapJPanelBtn

您可能还需要比这些面板实际名称更好的名称,并且您确实应该考虑将此 View 封装到从ImprimanteWindow. 换句话说,将片段之类的JPanelBtn部分放入另一个类中,该类在语义上定义了该分组是什么,例如SelectionChoices,然后在该类上定义一个返回 JPanel 的方法。

于 2012-04-13T16:50:52.403 回答
0

每次添加 JCheckBox、JLabel 或 JRadioButton(j从这里开始表示)时,尝试调用j.setHorizontalTextAlignment(SwingConstants.LEFT);. 但是,我怀疑这可能行不通,因为您使用GridLayout的是 ,这是一个相当不灵活的布局。

IHMO,如果您GridBagLayoutJPanels这些组件中使用并用于GridBagConstraints告诉布局如何在将这些组件添加到各自的面板时对齐这些组件,那就更好了。

于 2012-04-13T16:30:42.710 回答
0

要做到这一点,你只需这样做

    JPanel scope = new JPanel();
scope.setBorder(BorderFactory.createTitledBorder("Scope"));
scope.setLayout(new BoxLayout(scope,BoxLayout.Y_AXIS));
scope.setAlignmentX(Component.LEFT_ALIGNMENT);
于 2016-09-22T14:08:18.893 回答