2012-10-03 16 views
7

Ich möchte 2 Objekte auf JFrame anzeigen. Ich habe versucht, indem ich Objekte zu JPanel hinzufügen und dann JPanel zu JFrame hinzufügen, aber es hat auch nicht funktioniert. Ich habe auch versucht, Ball und Ball1 Objekte direkt zu JFrame hinzuzufügen, aber es zeigt nur das letzte hinzugefügte Objekt. Ich möchte beide Objekte gleichzeitig auf JFrame zeigen. Der unten angegebene Code zeigt nur ball1 Objekt.2 oder mehr Objekte zu JFrame hinzufügen

JFrame f = new JFrame("Moving"); 
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    //making 2 objects 
    Ballbewegung2 ball = new Ballbewegung2(); 
    Ballbewegung3 ball1 = new Ballbewegung3(); 
    JPanel contentPane = new JPanel(new BorderLayout()); 
    JPanel contentPane1 = new JPanel(new BorderLayout()); 

    //adding objects to JPanel 
    contentPane.add(ball, BorderLayout.CENTER);     
    contentPane1.add(ball1, BorderLayout.CENTER);     

    //Adding JPanel to JFrmae 
    f.getContentPane().add(contentPane); 
    f.getContentPane().add(contentPane1); 
    f.setSize(500, 500); 
    f.setVisible(true); 

Antwort

4

Der Inhaltsbereich von JFrame hat BorderLayout Layout-Manager standardmäßig. Das heißt, wenn Sie eine Komponente hinzufügen, wird diese in das CENTER gestellt. Wenn Sie eine weitere Komponente hinzufügen, wird sie erneut in die MITTE eingefügt und ersetzt die zuvor hinzugefügte Komponente.

Ein Beispiel, wie mehrere Komponenten hinzuzufügen:

JFrame f = new JFrame(); 

JPanel p = new JPanel(); 

p.add(new JButton("One")); 
p.add(new JButton("Two")); 

f.getContentPane().add(p, BorderLayout.CENTER); 

oder wenn eine Komponente an dem Inhaltsbereich Hinzufügen angeben, wo es zu setzen (und verschiedenen Standorten angeben):

JFrame f = new JFrame(); 

f.getContentPane().add(new JButton("One"), BorderLayout.NORTH); 
f.getContentPane().add(new JButton("Two"), BorderLayout.CENTER); 
+0

Ich gebe verschiedene Koordinaten für die Objekte, wo sie shown.I sind, haben auch die zweite Methode versucht, überschreibt es noch an das erste Objekt. – user1717353

+0

Falsch, Sie rufen 'f.getContentPane()' zweimal auf, indem Sie 2 verschiedene Komponenten übergeben, ohne jedoch Einschränkungen anzugeben. Und ein Panel mit BorderLayout ohne explizit spezifizierte Einschränkungen fügt die Komponente zur CENTER-Position hinzu, wobei die zweite die erste ersetzt. – icza

5

Ich empfehle Ihnen, ein JPanel zu verwenden, um beide JPanels als untergeordnete Elemente zu speichern und ein einzelnes JPanel zum JFrame-Inhaltsfenster hinzuzufügen.

Der zweite Aufruf der JFrame.add() -Methode ersetzt das zuerst hinzugefügte JPanel, wenn Sie nicht explizit einen anderen Layoutpfad angeben.

Ein einfaches Beispiel BoxLayout mit:

JPanel mainPanel= new JPanel(); 
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS)); 

mainPanel.add(contentPane); 
mainPanel.add(contentPane1); 
contentPane.add(mainPanel); 
+0

Der Code funktioniert gut, wenn ich mehr als 1 Schaltflächen auf dem JFrame hinzufüge, aber es funktioniert nicht mit den Objekten meiner Klassen. Ich habe auch versucht, 3 JPanles und dann mainPanel zu JFrame, aber immer noch die gleiche Ausgabe. – user1717353

1

Hier ist ein Beispiel UI so etwas wie diese

UI

Die Java-Komponenten verwendet zu erreichen, werden wie folgt Java Components

-Code :

// Call this function from the main 
private static void createAndShowGUI() { 
    // Create and set up the content pane. 
    MainPanel panel = new MainPanel(); 
    panel.setOpaque(true); // content panes must be opaque 

    // Display the window. 
    JFrame frmConsole = new JFrame("ITSME"); 
    frmConsole.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frmConsole.setPreferredSize(new Dimension(640, 480)); 
    frmConsole.add(panel); 
    frmConsole.pack(); 
    frmConsole.setLocationRelativeTo(null); 
    frmConsole.setVisible(true); 
} 

Klasse Mainpanel

public class MainPanel extends JPanel implements ActionListener { 
    private static final long serialVersionUID = 1L; 
    private int m_nX, m_nY; 
    private int m_nHeight = 30, m_nWidthLabel = 500, m_nPadding = 2; 

    private JLabel m_lblFilename, m_lblFileGen; 

    public MainPanel() { 
     // TODO Auto-generated constructor stub 
     super(new BorderLayout()); 
     try { 
      this.setLayout(null); 
      this.setBorder(new TitledBorder(new EtchedBorder(), 
       "Dynamic Time Warping")); 

      m_nX = this.getX() + 12; 
      m_nY = this.getY() + 24; 

      // Add the Filename Label 
      m_lblFilename = new JLabel("Label1"); 
      m_lblFilename.setBorder(new LineBorder(Color.BLUE, 2)); 
      m_lblFilename.setBounds(nX, nY, m_nWidthLabel, m_nHeight); 
      this.add(m_lblFilename); 

      // Adding a Label 
      nY += m_lblFilename.getHeight() + m_nPadding; 
      m_lblFileGen = new JLabel("Label1"); 
      m_lblFileGen.setBorder(new LineBorder(Color.RED, 2)); 
      m_lblFileGen.setBounds(nX, nY, m_nWidthLabel, 3 * m_nHeight); 
      m_lblFileGen.setForeground(Color.BLUE); 
      this.add(m_lblFileGen); 
     } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
Verwandte Themen