2017-11-18 16 views
1

私の希望のモデルを取得するためにそれを使用するために:私はにこの全体のメニューを置くことにしました私はSwingのレイアウトを知らないとどのように私はこのモック次の基本的なログインメニューを作成しようとしています

enter image description here

JPanelので、接続が成功すると別のパネルに切り替えることができます。

私はBorderlayoutを使用して、北エリアのタイトルと南エリアの接続ボタンを使用することにしました。

境界線の中心をパネル自体にしました。私は両方のラベル(ログイン、パスワード)だけでなく、ユーザーが自分のIDを置くテキストフィールドを持ってgridlayoutにすることにしました。

結果は非常に醜いと非常に遠くに私が期待したものからである。ここでは

enter image description here

は、メニューのコードです:

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を使用しようとしましたが、私それを使用する際に失敗し、コンパイルされませんでした。誰にもアドバイスや提案がありますか?

+1

コードが動作しないときは、[mcve]を置くことを検討してください。 – GhostCat

+1

レイアウトデザインの取り扱いについては、この回答を参照してください。https://stackoverflow.com/a/47121349/3992939 – c0der

+0

「私はgridboxlayoutを使用しようとしました」 - そのようなレイアウトはありません。適切なクラス名を使用すると、人々はあなたが話していることを知ることができます。実際の例は、[Layout Manager](https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html)のSwingチュートリアルを参照してください。レイアウトを実現するために、必要に応じて異なるレイアウトマネージャを使用してパネルをネストすることもできます。 – camickr

答えて

2

複雑なコンピューティングタスクを解決する一般的な戦略は、それらを細かく定義された管理可能なタスクに分割することです。分割統治。 これはguiにも当てはまります。デザインを小さくしてレイアウトが簡単なコンテナに分割します。この場合 は、例えば、3アール領域にデザインを分割することによって開始:

enter image description here

ような各領域は、ネストされたパネルにより実現されます。あなたが基本的な考え方を得れば

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); 
    } 
} 

は、レイアウトやその応答性をさらに向上させることができます。 あなたがコード内で見ることができるように、mainPanelをさらに容易にし、レイアウトを改善するために、ネストされた2つのパネルに分割されます。

関連する問題