2016-06-04 9 views
0

Ich möchte nur einige Komponenten in einem Panel hinzufügen und die Hintergrundfarbe des Panels einstellen. Aber ich kann es nicht machen. Kann mir jemand vorschlagen, wie es geht? Hier ist mein Code.So fügen Sie Komponenten zu einem JPanel hinzu

public Multiple2() { 
     getContentPane().setLayout(null); 

     JPanel p1 = new JPanel(); 
     p1.setBackground(Color.RED); 
     getContentPane().add(p1,BorderLayout.SOUTH); 

     lb1 = new JLabel("Enter the First Number: "); 
     lb1.setBounds(10, 10, 250, 20); 

     tf1 = new JTextField(100); 
     tf1.setBounds(155, 10, 400, 20); 

     lb2 = new JLabel("Enter the Second Number: "); 
     lb2.setBounds(10, 35, 250, 20); 

     tf2 = new JTextField(100); 
     tf2.setBounds(155, 35, 400, 20); 

     getContentPane().add(lb1); 
     getContentPane().add(tf1); 
     getContentPane().add(lb2); 
     getContentPane().add(tf2); 


     setVisible(true); 
     setSize(600, 400); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 
+1

Wie immer auf Stack-Überlauf, geben Sie bitte die erwartete und das tatsächliche Verhalten und Post vollständige Code (Ich kann mich irren, aber ich denke, * * Sie eine noch kleinere Beispiel machen das zeigt immer noch Ihr unerwünschtes Verhalten). "Kann es nicht machen" scheint vage; erzähle uns genau, was passiert ist, als du es versucht hast. –

+0

Vermeiden Sie 'null' Layouts, pixelperfekte Layouts sind eine Illusion im modernen UI Design. Es gibt zu viele Faktoren, die die individuelle Größe von Komponenten beeinflussen, von denen Sie keine kontrollieren können. Swing wurde entwickelt, um mit Layout-Managern im Kern zu arbeiten. Wenn Sie diese ignorieren, führt dies zu einem Ende der Probleme und Probleme, die Sie mehr und mehr Zeit damit verbringen, zu korrigieren. Sehen Sie sich zunächst [Auslegen von Komponenten in einem Container] an (http://docs.oracle.com/javase/tutorial/uiswing/layout/index.html). – MadProgrammer

Antwort

1

Sie scheinen zu versuchen, p an die BorderLayout.SOUTH Lage, der contentPane hinzufügen, aber Sie haben das Layout contentPane der entfernt Manager, und so hat es keine SOUTH Lage, und so sehen Sie nie p1 überall .

Um Komponenten zum p1 JPanel hinzuzufügen, müssen Sie die add(...)-Methode genauso verwenden, wie Sie es mit dem ContentPane von JFrame tun. Also statt

getContentPane().add(foo); 

Sie würden tun:

p1. add(foo); 

Dann würde man brauchen die p1 JPanel auf die BorderLayout.CENTER Position des contentPane hinzuzufügen, und verwenden Sie nicht null Layout.

Während Null-Layouts und setBounds() Swing-Neulinge scheinen wie die einfachste und beste Möglichkeit, komplexe GUI's zu erstellen, desto mehr Swing GUI'S erstellen Sie die ernsteren Schwierigkeiten, die Sie stoßen, wenn Sie sie verwenden. Sie werden die Größe Ihrer Komponenten nicht ändern, wenn die GUI die Größe ändert, sie sind eine royale Hexe, die verbessert oder beibehalten wird, sie scheitern komplett, wenn sie in Scrollpanels platziert werden. Sie sehen auf allen Plattformen oder Bildschirmauflösungen, die sich vom Original unterscheiden, grässlich aus .

Zum Beispiel:

import java.awt.Color; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.Insets; 
import javax.swing.*; 

public class Mult2 extends JPanel { 
    private JTextField field1 = new JTextField(10); 
    private JTextField field2 = new JTextField(10); 

    public Mult2() { 
     setLayout(new GridBagLayout()); 

     add(new JLabel("Enter the First Number:"), createGbc(0, 0)); 
     add(field1, createGbc(1, 0)); 
     add(new JLabel("Enter the Second Number:"), createGbc(0, 1)); 
     add(field2, createGbc(1, 1)); 

     setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); 
     setBackground(Color.PINK); 
    } 

    private static GridBagConstraints createGbc(int x, int y) { 
     GridBagConstraints gbc = new GridBagConstraints(); 
     gbc.gridx = x; 
     gbc.gridy = y; 
     gbc.gridheight = 1; 
     gbc.gridwidth = 1; 
     gbc.fill = GridBagConstraints.HORIZONTAL; 
     gbc.weightx = 1.0; 
     gbc.weighty = 1.0; 
     int right = x % 2 == 0 ? 15 : 5; 
     gbc.insets = new Insets(5, 5, 5, right); 
     return gbc; 
    } 

    private static void createAndShowGui() { 
     Mult2 mainPanel = new Mult2(); 

     JFrame frame = new JFrame("Multiply"); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     frame.getContentPane().add(mainPanel); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(() -> createAndShowGui()); 
    } 
}