这是它输出的内容:
我想在最左边对齐'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上都会有很大的帮助! 非常感谢你们!
答案 0 :(得分:1)
使用具有硬设置布局的嵌套面板,然后使用不具有硬设置的包装器,会让您的生活更加艰难。如果您要在微观级别上进行明确控制并具有特定的显示要求(例如标签案例),则应在JPanelWrap
和JPanelSuperWrap
中使用明确的布局。
此外,使用更好地传达您意图的布局。当GridLayout更好地表达您的意图时,为什么在嵌套组件中使用3x1 BoxLayout?您正在使用Swing等效的HTML嵌套<table>
布局。您可以使内部面板使用带填充的框,因为它们是简单的列,并使用2x2 GridBagLayout用于JPanelSuperWrap
,JPanelBtn
占用2行。
您可能还想要更好的名称而不是那些面板实际上是什么,并且您真的应该考虑将此View封装到从ImprimanteWindow
实例化的子组件中。换句话说,取像JPanelBtn
一样的片段并将其放入另一个语义定义分组的类中,如SelectionChoices
,然后在该类上定义一个返回JPanel的方法。
答案 1 :(得分:0)
每次从这里添加JCheckBox,JLabel或JRadioButton(表示为j
)时,请尝试调用j.setHorizontalTextAlignment(SwingConstants.LEFT);
。我怀疑这可能不起作用,因为你使用GridLayout
,这是一个相当不灵活的布局。
IHMO会更好,如果您在GridBagLayout
中使用JPanels
这些组件,并使用GridBagConstraints
告诉布局如何在将这些组件添加到其中时对齐这些组件各自的小组。
答案 2 :(得分:0)
为此,您只需执行此操作
JPanel scope = new JPanel();
scope.setBorder(BorderFactory.createTitledBorder("Scope"));
scope.setLayout(new BoxLayout(scope,BoxLayout.Y_AXIS));
scope.setAlignmentX(Component.LEFT_ALIGNMENT);