2016-05-04 16 views
0

Ich versuche, 2 Sätze von JLabels zu erstellen, ein Satz würde einen Namen enthalten und der zweite Satz würde Werte enthalten. Die Werte werden aus einer Datenbank abgerufen und für den zweiten Satz von JLabels angezeigt.Java JPanel und JLabels

Ich kann nicht scheinen, wie die 2 Sätze von JLabels ausgerichtet werden, so dass der Satz mit den Namen auf der linken Seite des Panels wäre und der Satz mit den Werten wäre direkt auf der rechten Seite. Ich weiß, dass mein Gitternetz einen Faktor hat. Ich weiß einfach nicht, was es sein soll.

package Frames; 

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.FlowLayout; 
import java.awt.Font; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.beans.PropertyChangeEvent; 
import java.beans.PropertyChangeListener; 

import javax.swing.BorderFactory; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.border.TitledBorder; 

import Application.Main; 

public class AccountFrame extends JPanel implements PropertyChangeListener, ActionListener { 

    private static JFrame accountFrame; 

    private JLabel firstNameLabel; 
    private JLabel lastNameLabel; 
    private JLabel dobLabel; 
    private JLabel emailLabel; 
    private JLabel usernameLabel; 
    private JLabel passwordLabel; 

    private static String firstNameLabelText = "First Name: "; 
    private static String lastNameLabelText = "Last Name: "; 
    private static String dobLabelText = "Date Of Birth: "; 
    private static String emailLabelText = "Email: "; 
    private static String usernameLabelText = "Username: "; 
    private static String passwordLabelText = "Password: "; 

    private static JButton editButton; 
    private static JButton closeButton; 

    public AccountFrame() { 
     super(new BorderLayout()); 

     firstNameLabel = new JLabel(firstNameLabelText); 
     firstNameLabel.setForeground(Color.WHITE); 
     firstNameLabel.setFont(new Font("Andalus", Font.BOLD, 18)); 

     lastNameLabel = new JLabel(lastNameLabelText); 
     lastNameLabel.setForeground(Color.WHITE); 
     lastNameLabel.setFont(new Font("Andalus", Font.BOLD, 18)); 

     dobLabel = new JLabel(dobLabelText); 
     dobLabel.setForeground(Color.WHITE); 
     dobLabel.setFont(new Font("Andalus", Font.BOLD, 18)); 

     emailLabel = new JLabel(emailLabelText); 
     emailLabel.setForeground(Color.WHITE); 
     emailLabel.setFont(new Font("Andalus", Font.BOLD, 18)); 

     usernameLabel = new JLabel(usernameLabelText); 
     usernameLabel.setForeground(Color.WHITE); 
     usernameLabel.setFont(new Font("Andalus", Font.BOLD, 18)); 

     passwordLabel = new JLabel(passwordLabelText); 
     passwordLabel.setForeground(Color.WHITE); 
     passwordLabel.setFont(new Font("Andalus", Font.BOLD, 18)); 

     editButton = new JButton("Edit"); 
     editButton.setBackground(new Color(129,13,13)); 
     editButton.setForeground(Color.WHITE); 
     editButton.setFocusPainted(false); 
     editButton.setFont(new Font("Andalus", Font.BOLD, 18)); 
     editButton.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
//EDIT ACCOUNT INFORMATION. 
      } 
     }); 

     closeButton = new JButton("Close"); 
     closeButton.setBackground(new Color(129,13,13)); 
     closeButton.setForeground(Color.WHITE); 
     closeButton.setFocusPainted(false); 
     closeButton.setFont(new Font("Andalus", Font.BOLD, 18)); 
     closeButton.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       accountFrame.dispose(); 
      } 
     }); 

     TitledBorder accountPanelBorder = BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.WHITE), "Account", TitledBorder.CENTER , TitledBorder.TOP, new Font("Andalus", Font.BOLD, 18)); 
     accountPanelBorder.setTitleColor(Color.WHITE); 

     //this is where the labels need to have values 
     //added on to the string to get values from the current character. 
     JPanel accountPanel = new JPanel(new GridLayout(0, 1)); 
     accountPanel.add(firstNameLabel, BorderLayout.WEST); 
     accountPanel.add(lastNameLabel, BorderLayout.WEST); 
     accountPanel.add(dobLabel, BorderLayout.WEST); 
     accountPanel.add(emailLabel, BorderLayout.WEST); 
     accountPanel.add(usernameLabel, BorderLayout.WEST); 
     accountPanel.add(passwordLabel, BorderLayout.WEST); 
     accountPanel.setBackground(new Color(82,80,80)); 
     accountPanel.setBorder(accountPanelBorder); 
     accountPanel.setPreferredSize(new Dimension(400,200)); 

//  JPanel accountValuesPanel = new JPanel(new GridLayout(0, 1)); 
//  accountValuesPanel.add(firstNameValue); 
//  accountValuesPanel.setBackground(new Color(82,80,80)); 

     JPanel buttons = new JPanel(new FlowLayout(FlowLayout.CENTER)); 
     buttons.add(editButton); 
     buttons.add(closeButton); 
     buttons.setBackground(new Color(82,80,80)); 

     setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20)); 
     setBackground(new Color(82,80,80)); 
     add(accountPanel, BorderLayout.WEST); 
     add(buttons, BorderLayout.SOUTH); 
//  add(accountValuesPanel, BorderLayout.LINE_END); 
    } 

    /** 
    * Create the GUI and show it. For thread safety, 
    * this method should be invoked from the 
    * event dispatch thread. 
    */ 
    public static void createAndShowGUI() { 
     accountFrame = new JFrame("OVERRATED"); 
     accountFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     accountFrame.setBackground(Color.red); 
     accountFrame.add(new AccountFrame()); 
     accountFrame.setVisible(true); 
     accountFrame.pack(); 
     accountFrame.setLocationRelativeTo(null); 
     accountFrame.setTitle("OVERRATED"); 
     accountFrame.setResizable(false); 
     //startupFrame.setIconImage(new ImageIcon().getImage()); 
     JFrame.setDefaultLookAndFeelDecorated(false); 
    } 

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

    } 

    @Override 
    public void propertyChange(PropertyChangeEvent evt) { 
     // TODO Auto-generated method stub 

    } 

    public static void main(String[] args) { 
     AccountFrame a = new AccountFrame(); 
     a.createAndShowGUI(); 
    } 
} 
+0

Vorschlag: in Java Netbeans Schauen. Es verfügt über eine Drag-and-Drop-IDE, mit der Sie Elemente einfach auf einen 'JFrame' ablegen können, anstatt sie hart zu codieren. So habe ich gelernt, mit 'JFrame's und' GroupLayout's zu arbeiten. –

+0

Sie erstellen ein JPanel namens accountPanel mit einem GridLayout, das nur eine Spalte hat. Dies ist keine sehr gute Verwendung eines Gridlayouts. Und dann fügen Sie Ihre Komponenten mit BorderLayout Positionierung hinzu? – FredK

+0

Entfernen Sie alle 'BorderLayout.WEST's, wechseln Sie sie zu' GridLayout (0,2) 'und fügen Sie alternierende Namen und Werte hinzu. Rasterlayouts füllen sich von links nach rechts und dann von oben nach unten. – resueman

Antwort

1

Ihr Problem ist, dass Ihre GridLayout nur 1 Spalte hat. Sie müssen Ihre GridLayout wie folgt erstellen: new GridLayout(0, 2). Im Folgenden finden Sie ein kleines ausführbares Beispiel, das JLabels direkt nebeneinander aufteilt.

public static void main(String[] args) { 
    JFrame f = new JFrame("Good day"); 
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    f.setSize(400, 250); 

    JPanel panel = new JPanel(new GridLayout(0, 2)); 
    JLabel left = new JLabel("Foo"); 
    JLabel right = new JLabel(("Bar")); 
    JLabel hello = new JLabel("Hello"); 
    JLabel world = new JLabel("World"); 
    panel.add(left); 
    panel.add(right); 
    panel.add(hello); 
    panel.add(world); 
    f.add(panel); 

    f.setVisible(true); 
} 
2

Zunächst einmal, auch wenn Ihr accountPanel Layout ist gridlayout, Sie ist es Border verwendet haben:

JPanel accountPanel = new JPanel(new GridLayout(0, 1)); 
accountPanel.add(firstNameLabel, BorderLayout.WEST); // BorderLayout.WEST wrong 

Mein Vorschlag, sollten Sie dafür verwenden GridBagLayout. GridbagLayout scheint schwierig zu lernen, aber es ist eigentlich ziemlich logisch.

Ich habe Ihren Code ein wenig geändert.

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.FlowLayout; 
import java.awt.Font; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.Insets; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.beans.PropertyChangeEvent; 
import java.beans.PropertyChangeListener; 

import javax.swing.BorderFactory; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JPasswordField; 
import javax.swing.JTextField; 
import javax.swing.border.TitledBorder; 

@SuppressWarnings("serial") 
public class AccountFrame extends JPanel implements PropertyChangeListener, 
     ActionListener { 
    private static JFrame accountFrame; 
    private JTextField firstNameTextField, lastNameTextField, dobTextField, 
      emailTextField, userNameTextField; 
    private JPasswordField passwordPasswordField; 

    private JLabel firstNameLabel; 
    private JLabel lastNameLabel; 
    private JLabel dobLabel; 
    private JLabel emailLabel; 
    private JLabel usernameLabel; 
    private JLabel passwordLabel; 

    private static String firstNameLabelText = "First Name: "; 
    private static String lastNameLabelText = "Last Name: "; 
    private static String dobLabelText = "Date Of Birth: "; 
    private static String emailLabelText = "Email: "; 
    private static String usernameLabelText = "Username: "; 
    private static String passwordLabelText = "Password: "; 

    private static JButton editButton; 
    private static JButton closeButton; 

    public AccountFrame() { 
     super(new BorderLayout()); 

     firstNameLabel = new JLabel(firstNameLabelText); 
     firstNameLabel.setForeground(Color.WHITE); 
     firstNameLabel.setFont(new Font("Andalus", Font.BOLD, 18)); 

     lastNameLabel = new JLabel(lastNameLabelText); 
     lastNameLabel.setForeground(Color.WHITE); 
     lastNameLabel.setFont(new Font("Andalus", Font.BOLD, 18)); 

     dobLabel = new JLabel(dobLabelText); 
     dobLabel.setForeground(Color.WHITE); 
     dobLabel.setFont(new Font("Andalus", Font.BOLD, 18)); 

     emailLabel = new JLabel(emailLabelText); 
     emailLabel.setForeground(Color.WHITE); 
     emailLabel.setFont(new Font("Andalus", Font.BOLD, 18)); 

     usernameLabel = new JLabel(usernameLabelText); 
     usernameLabel.setForeground(Color.WHITE); 
     usernameLabel.setFont(new Font("Andalus", Font.BOLD, 18)); 

     passwordLabel = new JLabel(passwordLabelText); 
     passwordLabel.setForeground(Color.WHITE); 
     passwordLabel.setFont(new Font("Andalus", Font.BOLD, 18)); 

     // lets create JTextFields and a JPasswordField 
     firstNameTextField = new JTextField(20); 
     lastNameTextField = new JTextField(20); 
     dobTextField = new JTextField(20); 
     emailTextField = new JTextField(20); 
     userNameTextField = new JTextField(20); 
     passwordPasswordField = new JPasswordField(20); 

     editButton = new JButton("Edit"); 
     editButton.setBackground(new Color(129, 13, 13)); 
     editButton.setForeground(Color.WHITE); 
     editButton.setFocusPainted(false); 
     editButton.setFont(new Font("Andalus", Font.BOLD, 18)); 
     editButton.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       // EDIT ACCOUNT INFORMATION. 
      } 
     }); 

     closeButton = new JButton("Close"); 
     closeButton.setBackground(new Color(129, 13, 13)); 
     closeButton.setForeground(Color.WHITE); 
     closeButton.setFocusPainted(false); 
     closeButton.setFont(new Font("Andalus", Font.BOLD, 18)); 
     closeButton.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       accountFrame.dispose(); 
      } 
     }); 

     TitledBorder accountPanelBorder = BorderFactory.createTitledBorder(
       BorderFactory.createLineBorder(Color.WHITE), "Account", 
       TitledBorder.CENTER, TitledBorder.TOP, new Font("Andalus", 
         Font.BOLD, 18)); 
     accountPanelBorder.setTitleColor(Color.WHITE); 

     // this is where the labels need to have values 
     // added on to the string to get values from the current character. 
     JPanel accountPanel = new JPanel(new GridBagLayout()); 
     accountPanel.setBackground(new Color(82, 80, 80)); 
     accountPanel.setBorder(accountPanelBorder); 
     accountPanel.setPreferredSize(new Dimension(400, 200)); 

     GridBagConstraints gbc = new GridBagConstraints(); 
     gbc.anchor = GridBagConstraints.CENTER; 
     gbc.fill = GridBagConstraints.BOTH; 
     gbc.insets = new Insets(0, 0, 0, 0); 

     // lets add labels and textfields 

     // 1. row 
     gbc.gridx = 0; 
     gbc.gridy = 0; 
     gbc.gridwidth = 1; 
     gbc.gridheight = 1; 
     accountPanel.add(firstNameLabel, gbc); 

     gbc.gridx = 1; 
     gbc.gridwidth = 2; 
     accountPanel.add(firstNameTextField, gbc); 

     // 2. row 
     gbc.gridx = 0; 
     gbc.gridy = 1; 
     gbc.gridwidth = 1; 
     gbc.gridheight = 1; 
     accountPanel.add(lastNameLabel, gbc); 

     gbc.gridx = 1; 
     gbc.gridwidth = 2; 
     accountPanel.add(lastNameTextField, gbc); 

     // 3. row 
     gbc.gridx = 0; 
     gbc.gridy = 2; 
     gbc.gridwidth = 1; 
     gbc.gridheight = 1; 
     accountPanel.add(dobLabel, gbc); 

     gbc.gridx = 1; 
     gbc.gridwidth = 2; 
     accountPanel.add(dobTextField, gbc); 

     // 4. row 
     gbc.gridx = 0; 
     gbc.gridy = 3; 
     gbc.gridwidth = 1; 
     gbc.gridheight = 1; 
     accountPanel.add(emailLabel, gbc); 

     gbc.gridx = 1; 
     gbc.gridwidth = 2; 
     accountPanel.add(emailTextField, gbc); 

     // 5. row 
     gbc.gridx = 0; 
     gbc.gridy = 4; 
     gbc.gridwidth = 1; 
     gbc.gridheight = 1; 
     accountPanel.add(usernameLabel, gbc); 

     gbc.gridx = 1; 
     gbc.gridwidth = 2; 
     accountPanel.add(userNameTextField, gbc); 

     // 6. row 
     gbc.gridx = 0; 
     gbc.gridy = 5; 
     gbc.gridwidth = 1; 
     gbc.gridheight = 1; 
     accountPanel.add(passwordLabel, gbc); 

     gbc.gridx = 1; 
     gbc.gridwidth = 2; 
     accountPanel.add(passwordPasswordField, gbc); 

     JPanel buttons = new JPanel(new FlowLayout(FlowLayout.CENTER)); 
     buttons.add(editButton); 
     buttons.add(closeButton); 
     buttons.setBackground(new Color(82, 80, 80)); 

     setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20)); 
     setBackground(new Color(82, 80, 80)); 
     add(accountPanel, BorderLayout.WEST); 
     add(buttons, BorderLayout.SOUTH); 
     // add(accountValuesPanel, BorderLayout.LINE_END); 
    } 

    /** 
    * Create the GUI and show it. For thread safety, this method should be 
    * invoked from the event dispatch thread. 
    */ 
    public static void createAndShowGUI() { 
     accountFrame = new JFrame("OVERRATED"); 
     accountFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     accountFrame.setBackground(Color.red); 
     accountFrame.add(new AccountFrame()); 

     accountFrame.pack(); 
     accountFrame.setTitle("OVERRATED"); 
     accountFrame.setResizable(false); 
     accountFrame.setVisible(true); 
    } 

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

    } 

    @Override 
    public void propertyChange(PropertyChangeEvent evt) { 
     // TODO Auto-generated method stub 

    } 

    public static void main(String[] args) { 
     AccountFrame a = new AccountFrame(); 
     a.createAndShowGUI(); 
    } 
} 

screenshot