我不知道该摆的布局,以及如何使用它来获取我想要的模型
问题描述:
我试图做一个基本的登录菜单下面这个模仿了起来:我不知道该摆的布局,以及如何使用它来获取我想要的模型
我决定把这个整个菜单进入一个JPanel,所以一旦连接成功,我可以切换到另一个面板。
因此,我决定使用Borderlayout在北部地区拥有标题,在南部地区拥有连接按钮。
我做了borderlayout面板的中心本身。我决定将它作为一个网格布局,以便拥有标签(登录名,密码)以及用户放置其标识的文本字段。
结果是非常丑陋,从很远的我的预期:
这是菜单的代码:
public class EcranAccueil extends JPanel {
private JLabel labelTitre;
private JPanel PanelConnexion;
private JButton boutonConnexion;
private JLabel labelLogin;
private JLabel labelMotDepasse;
private JTextField loginUser;
private JTextField MotDepasseUser;
EcranAccueil(EcranGestion EcranPrincipale){
PanelConnexion = new JPanel();
this.setLayout(new BorderLayout());
PanelConnexion.setLayout(new GridLayout(2,2));
loginUser = new JTextField("User");
loginUser.setMinimumSize(new Dimension(20,20));
loginUser.setMaximumSize(new Dimension(20,20));
MotDepasseUser = new JTextField("Password");
boutonConnexion = new JButton("Connect");
boutonConnexion.setMinimumSize(new Dimension(200,200));
boutonConnexion.setMaximumSize(new Dimension(200,200));
labelTitre= new JLabel("ApplicationName");
labelLogin= new JLabel("Login");
labelMotDepasse = new JLabel("Password");
PanelConnexion.add(labelLogin);
PanelConnexion.add(loginUser);
PanelConnexion.add(labelMotDepasse);
PanelConnexion.add(MotDepasseUser);
this.add(labelTitre, BorderLayout.NORTH);
this.add(PanelConnexion, BorderLayout.CENTER);
this.add(boutonConnexion, BorderLayout.SOUTH);
} }
我试图用一个gridboxlayout但我完全没有使用它,它没有编译。有没有人有建议或建议?
答
解决复杂计算任务的常用策略是将它们分解为小的,定义明确的可管理任务。分而治之。 这也适用于gui:将设计分解为小型,易于布置的容器。 在这种情况下,例如启动通过将设计成3顷领域:
每个这样的区域由嵌套面板实现。 正如你可以在代码中看到,mainPanel
被进一步分为两个嵌套的面板,以缓解和改善布局:
class EcranAccueil extends JPanel {
EcranAccueil(){
//Set layout (JPanel uses Flowlayout by default)
setLayout(new BorderLayout(5,5));
// a nested panel for application label
JPanel topPanel = new JPanel();
add(topPanel, BorderLayout.NORTH);
topPanel.setLayout(new FlowLayout(FlowLayout.LEADING));//set
JLabel labelTitre= new JLabel("ApplicationName");
topPanel.add(labelTitre);
// a nested panel for login and password, having two rows
JPanel mainPanel = new JPanel(new GridLayout(2, 1));
add(mainPanel, BorderLayout.CENTER);
JPanel loginPanel = new JPanel();
loginPanel.setLayout(new FlowLayout(FlowLayout.TRAILING));
mainPanel.add(loginPanel);
JLabel labelLogin = new JLabel("Login");
loginPanel.add(labelLogin);
JTextField loginUser = new JTextField("User");
loginUser.setColumns(10);
loginPanel.add(loginUser);
JPanel passwordPanel = new JPanel();
passwordPanel.setLayout(new FlowLayout(FlowLayout.TRAILING));
mainPanel.add(passwordPanel);
JLabel labelMotDepasse = new JLabel("Password");
passwordPanel.add(labelMotDepasse);
JTextField motDepasseUser = new JTextField("Password");
motDepasseUser.setColumns(10);
passwordPanel.add(motDepasseUser);
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new FlowLayout(FlowLayout.CENTER));
add(buttonPanel,BorderLayout.SOUTH);
JButton boutonConnexion = new JButton("Connect");
buttonPanel.add(boutonConnexion);
}
}
一旦你的基本思路,布局和它的响应可以进一步提高。
如果您的代码不起作用,请考虑为其设置[mcve]。 – GhostCat
请参阅此答案以了解如何处理布局设计:https://stackoverflow.com/a/47121349/3992939 – c0der
'我尝试使用gridboxlayout' - 没有这种布局。使用适当的类名,让人们知道你在说什么。阅读[布局管理器]上的Swing教程(https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html)以获取工作示例以帮助您入门。如果需要实现布局,也可以嵌套具有不同布局管理器的面板。 – camickr