2016-04-13 9 views
0

私は、フローレイアウトを使用してメニュー画面を作成していますが、ボタンを追加するたびに1行に追加されます。ボタンレイアウトのGUIトラブル

import java.awt.CardLayout; 
import java.awt.Container; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
public class Proj 
{ 
    JPanel card1,card2; 
    ActionListener listener; 
    JFrame menu; 
    JFrame catagories; 
    JButton menu1,addOrTake,cata,payd,showd; 
    //JButton 
    public Proj(){ 


     card2=new JPanel(); 


     menu = new JFrame("Card Layout"); 
     catagories = new JFrame(); 

     //final Container contentPane = menu.getContentPane(); 
     final CardLayout layout = new CardLayout(); 
     menu.setLayout(layout); 
     card1=new JPanel(); 

     menu1 = new JButton(""); 
     menu1.setIcon(new ImageIcon("C:/Users/sabar/Menu.jpg")); 
     menu1.setSize(60,600); 
     menu1.setVisible(true); 

     addOrTake = new JButton(); 
     addOrTake.setIcon(new ImageIcon("C:/Users/Public/Pictures/Sample  Pictures/Penguins.jpg")); 

     cata = new JButton(""); 
     cata.setIcon(new ImageIcon("C:/Users/Public/Pictures/Sample Pictures/Penguins.jpg")); 

     showd = new JButton(""); 
     showd.setIcon(new ImageIcon("C:/Users/Public/Pictures/Sample Pictures/Penguins.jpg")); 

     payd = new JButton(""); 
     payd.setSize(60, 600); 
     payd.setIcon(new ImageIcon("C:/Users/Public/Pictures/Sample Pictures/Penguins.jpg")); 
     payd.setVisible(true); 

     card1.add(menu1); 
     card1.add(addOrTake); 
     card1.add(cata); 
     card1.add(showd); 
     card1.add(payd); 

     menu1.addActionListener(listener); 
     addOrTake.addActionListener(listener); 
     cata.addActionListener(listener); 
     showd.addActionListener(listener); 
     payd.addActionListener(listener); 

     listener = new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent arg0) {}}; 
      // TODO Auto-generated method stub 



      menu.setSize(60, 600); 
      menu.setVisible(true); 
      JButton poo=new JButton("Poo"); 
      poo.setSize(60,600); 
      card2.add((poo)); 
      card2.add(new JButton("Pee")); 
      card2.add(new JButton("Per")); 
      card2.add(new JButton("POt")); 
      card2.setVisible(false); 
      menu.add(card2); 

      menu.add(card1); 
      catagories.pack(); 
      menu.pack(); 
      card1.setVisible(false); 


    } 
    public static void main(String[]args) 
    { 
     Proj poop =new Proj(); 
    } 
} 
+1

間違ったぶん私は「'GridBagLayout'代わり – MadProgrammer

答えて

2

問題:

  • あなたは第二パラメータ文字列定数を使用せずに、メニューにCardLayout-使用してコンテナをコンポーネントを追加しています。これがなければ、「カード」(コンポーネント)を簡単に交換するのが難しいかもしれません。
  • 1つの列タイプのレイアウトが必要な場合は、これを可能にするレイアウトマネージャを使用する必要があり、JPanelのデフォルトレイアウトはそうではありません。より良いオプション:
    • のGridLayout(0、1)行の可変数、一つの列
    • BoxLayout(コンテナ、BoxLayout.PAGE_AXIS)
    • GridBagLayoutのための右てGridBagConstraintのgridxおよびgridy属性を持ちます。
+0

を使用して使用しているので、私はまた、それがどのように動作するかの詳細についてはHow to Use CardLayoutをよく見ていたいですかなり新しいjavaです。カードレイアウトとグリッドレイアウトの両方を行うことは可能ですか?メニュー画面を切り替える必要があります。 –

+1

@KenM:もちろん。 「カード」JPanelの1つでGridLayoutを使い、JPanelを使ってCardLayoutに追加するだけです。しかし、あなたの質問とコードは、あなたがレイアウトマネージャーのチュートリアルを一読していないことを教えてくれています。 –

+0

@KenM各レイアウトは個々のコンテナを担当するので、 'CardLayout'は' card1'と 'card2'コンポーネントを処理し、' GridBagLayout'はボタンを処理します – MadProgrammer

1

あなたの結果をachivingすることのできるレイアウトマネージャを使用してスタート。

まず、Laying Out Components Within a ContainerHow to Use GridLayoutおよびHow to Use GridBagLayoutをご覧ください。

Layout

import java.awt.CardLayout; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.ImageIcon; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class Proj { 

    JPanel card1, card2; 
    ActionListener listener; 
    JButton menu1, addOrTake, cata, payd, showd; 
    //JButton 

    JFrame menu; 

    public Proj() { 

     menu = new JFrame("Card Layout"); 

     //final Container contentPane = menu.getContentPane(); 
     final CardLayout layout = new CardLayout(); 
     menu.setLayout(layout); 
     card1 = new JPanel(new GridBagLayout()); 
     card2 = new JPanel(new GridBagLayout()); 

     GridBagConstraints gbc = new GridBagConstraints(); 
     gbc.gridwidth = GridBagConstraints.REMAINDER; 
     gbc.fill = GridBagConstraints.HORIZONTAL; 

     menu1 = new JButton("Mneu"); 
     menu1.setVisible(true); 

     addOrTake = new JButton("Add or take"); 
     cata = new JButton("Cata"); 
     showd = new JButton("ShowD"); 
     payd = new JButton("payd"); 

     card1.add(menu1, gbc); 
     card1.add(addOrTake, gbc); 
     card1.add(cata, gbc); 
     card1.add(showd, gbc); 
     card1.add(payd, gbc); 

     menu1.addActionListener(listener); 
     addOrTake.addActionListener(listener); 
     cata.addActionListener(listener); 
     showd.addActionListener(listener); 
     payd.addActionListener(listener); 

     listener = new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent arg0) { 
      } 
     }; 
     // TODO Auto-generated method stub 

     JButton poo = new JButton("Poo"); 
     card2.add((poo), gbc); 
     card2.add(new JButton("Pee"), gbc); 
     card2.add(new JButton("Per"), gbc); 
     card2.add(new JButton("POt"), gbc); 

     menu.add(card2, "Card2"); 
     menu.add(card1, "Card1"); 

     layout.show(menu.getContentPane(), "Card1"); 

     menu.pack(); 
     menu.setLocationRelativeTo(null); 
     menu.setVisible(true); 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       Proj poop = new Proj(); 
      } 
     }); 
    } 
} 

あなたはそれが

+0

ありがとう、本当に役立った。私は今それを修正する私の方法です:) –