2016-04-13 16 views
0

Ich versuche, Flow-Layout zu verwenden, um einen Menübildschirm zu erstellen, der mit einer einzelnen Spalte ausgerichtet ist, aber jedes Mal, wenn ich eine Schaltfläche hinzufüge, fügt es es zu einer einzelnen Zeile hinzu.Gui Problem mit Schaltflächenlayout

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

Vielleicht ein 'GridBagLayout' anstelle – MadProgrammer

Antwort

2

Probleme:

  • Sie Komponenten zum Menü hinzufügen, der Behälter-Cardlayout verwenden, ohne ständige Verwendung eines zweiten Parameter String. Ohne dies könnte es schwierig sein, einfach "Karten" (Komponenten) auszutauschen.
  • Wenn Sie eine einzelne Spalte Typ des Layouts möchten, müssen Sie einen Layout-Manager verwenden, der dies erlaubt, und das JPanel Standardlayout ist es nicht. Bessere Möglichkeiten:
    • Gridlayout (0, 1) für eine variable Anzahl von Zeilen, eine Spalte
    • BoxLayout (Container, BoxLayout.PAGE_AXIS)
    • GridBagLayout mit der rechten GridBagConstraint gridx und gridy Attribute.
+0

ich Ich bin ziemlich neu in Java. Ist es möglich Kartenlayout und Rasterlayout zu erstellen? Ich muss zwischen den Menübildschirmen wechseln. –

+1

@KenM: natürlich. Verwenden Sie einfach GridLayout in einem der "Karten" JPanels und fügen Sie es mit JPanel zum CardLayout hinzu. Aber Ihre Frage und Ihr Code sagen uns, dass Sie das Layout-Manager-Tutorial überhaupt nicht gelesen haben, und Sie möchten dies zuerst tun. –

+0

@KenM Jedes Layout wäre für einen individuellen Container zuständig, also würde sich das 'CardLayout' um die Komponenten' card1' und 'card2' kümmern und das' GridBagLayout' würde sich um die Buttons kümmern – MadProgrammer

1

Beginnen Sie mit einem Layout-Manager verwendet, die von achiving Ergebnisse in der Lage ist.

Beginnen Sie mit Blick auf Laying Out Components Within a Container, How to Use GridLayout und How to Use GridBagLayout für einige Ideen.

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

Ich würde auch einen genaueren Blick auf How to Use CardLayout, um weitere Informationen darüber, wie es funktioniert, weil Sie verwenden es falsch

+0

Danke, das war wirklich hilfreich . Ich bin auf dem Weg, es jetzt zu reparieren :) –