2016-05-04 28 views
0

2セットのJLabelを作成しようとしていますが、1セットには名前が含まれ、2セットには値が含まれます。値はデータベースから取得され、JLabelの第2のセットに表示されます。Java JPanelとJLabelの

名前のあるセットがパネルの左側にあり、値を含むセットが右側になるように、JLabelsの2つのセットを並べる方法がわかりません。私は、私のグリッドレイアウトには何があるのか​​分かりません。

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

提案:JavaのNetbeansのに見て。これはドラッグ&ドロップIDEを備えています。これを使用すると、要素をハードコードするのではなく、単にJFrameにドロップすることができます。それで、 'JFrame'と' GroupLayout'を使って作業する方法を学びました。 –

+0

accountPanelという名前のJPanelを、GridLayoutを使用して作成します。GridLayoutは1列のみです。これはGridlayoutをうまく利用することではありません。そして、BorderLayoutポジショニングを使用してコンポーネントを追加しますか? – FredK

+0

すべての 'BorderLayout.WEST'を削除し、' GridLayout(0,2) 'に切り替え、名前と値を交互に追加します。グリッドレイアウトは、左から右に、そして上から下にいっぱいになります。 – resueman

答えて

1

あなたの問題は、GridLayoutには1列しかないことです。 new GridLayout(0, 2)のようにGridLayoutを作成する必要があります。以下は、JLabelのペアを互いに並べて配置する小さな実行可能な例です。 、あなたはそれを使用していても、あなたのaccountPanelレイアウトがGridLayoutのですが、まず第一に

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

は、BorderLayoutです:

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

私の提案は、あなたがそれのためのGridBagLayout使用する必要があります。 GridbagLayoutは学習するのが難しく見えるかもしれませんが、実際はかなり論理です。

コードを少し変更しました。

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