1

私は Java で GUI を作成しようとしています。これは Java で GUI を使用する最初のベンチャーであり、学習しようとしています。これがアーカイブしたいレイアウトです

上記は私が作成しようとしているものです.しかし、私は単純にそのように設計することはできません.ここに私のコードがあります:

//Frame:   
     JFrame frame;
     //Menu :
     JMenuBar menuBar;
     JMenu menu1,menu2;
     JMenuItem menuItem;
     //Panels:
     JPanel topPanel;
     JPanel centerPanel;
     JPanel bpttomPanel;  
     String[] vTypeStrings = { "Select vehicle","Car", "Boat", "Truck", };
     //Labels:
     JLabel typeLabel;
     //ComboBoxes:
     JComboBox vList;;

     //Frame creation   
     frame= new JFrame("frame1");
     frame.setSize(450,250);
     frame.setLocation(200,300);
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     frame.setLayout(new GridLayout(3,1));

     //Create the menu bar.
     menuBar = new JMenuBar();

     //Create menu bar items
     menu1 = new JMenu("File");
     menu1.setMnemonic('F');
     menuBar.add(menu1);

     menu2 = new JMenu("Help");
     menu2.setMnemonic('H');
     menuBar.add(menu2);

     //Adding items to  each menu 
     menuItem = new JMenuItem("Load", 'L');
     menu1.add(menuItem);
     menuItem = new JMenuItem("Exit", 'X');
     menu1.add(menuItem);
     //Second menu
     menuItem = new JMenuItem("About",'A');
     menu2.add(menuItem);

     //Adding menu to frame
     frame.setJMenuBar(menuBar);



     //Top Panel
      topPanel = new JPanel(new FlowLayout());
      frame.add(topPanel,BorderLayout.NORTH);
      JLabel headLabel=new JLabel("Snedden's Ordering system");//Heading label
      topPanel.add(headLabel);
      headLabel.setFont(new Font("Serif", Font.PLAIN, 24));
      headLabel.setForeground(new Color(0xff0000));


     //Center Panel
     centerPanel = new JPanel();
     centerPanel.setLayout(new GridLayout(2,2,2,2));
     vList = new JComboBox(vTypeStrings);
     vList.setSelectedIndex(0);
     typeLabel=new JLabel("Vehicle Type");
     typeLabel.setLabelFor(vList);
     centerPanel.add(typeLabel);
     centerPanel.add(vList);
     frame.add(centerPanel,BorderLayout.CENTER);



     frame.setVisible(true);

ここに私が得るものがありますMYレイアウト、まだ途中

ラベルとフィールドが同じ行にあるのですが、理由がわかりません。よろしくお願いします。

4

3 に答える 3

0
frame.setLayout(new GridLayout(3,1));

これはあなたの最初の間違いです。a のセルGridLayoutはすべて同じサイズですが、中央部分を高くする必要があります。

frame.add(topPanel,BorderLayout.NORTH);
....
frame.add(centerPanel,BorderLayout.CENTER);

これは 2 番目のものです。フレームに を設定したため、制約GridLayoutを使用しないでください。BorderLayout

私の意見では、正しいことは、最初の行を削除し、フレームをデフォルトの境界レイアウトのままにすることです。

グリッドの問題については、グリッドを埋めていないことが原因です。グリッドに 4 つのコントロールを挿入するか、(1,2) でグリッドを初期化すると、期待どおりの結果が得られます。

これは次のcenterPanel.setLayout(new GridLayout(1,2));とおりです。1x2 グリッドのレイアウト

そして、これは `

centerPanel.add(typeLabel);
centerPanel.add(vList);
centerPanel.add(new JLabel());
centerPanel.add(new JLabel());

2x2 グリッドとダミー ラベルを使用したレイアウト

于 2013-10-18T23:56:49.960 に答える