Новое окно кнопок и выравнивание пользовательского интерфейса - PullRequest
0 голосов
/ 08 декабря 2011

Я создал главное окно, в котором пользователь будет щелкать, если он системный администратор, сотрудник или участник финансов, одна из моих проблем заключается в том, что они не центрированы на экране, как мне это сделать?Во-вторых, я хочу, чтобы это работало так, когда я нажимаю кнопку «Финансы», главное окно закроется, и оно выведет меня на экран входа в систему, как бы я это сделал ??Вот мой код MainWindow

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.CardLayout;
import javax.swing.JEditorPane;
import javax.swing.SpringLayout;
import javax.swing.JButton;
import javax.swing.JTextField;
import javax.swing.JLabel;
import javax.swing.JFormattedTextField;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;


    public class MainWindow extends JFrame {

        private JPanel contentPane;

        /**
         * Launch the application.
         */
        public static void main(String[] args) {
            EventQueue.invokeLater(new Runnable() {
                public void run() {
                    try {
                        MainWindow frame = new MainWindow();
                        frame.setVisible(true);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
        }

        /**
         * Create the frame.
         */
        public MainWindow() {
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setBounds(100, 100, 333, 191);
            contentPane = new JPanel();
            contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
            setContentPane(contentPane);
            contentPane.setLayout(new BorderLayout(0, 0));

            JButton btnNewButton = new JButton("Employee");
            contentPane.add(btnNewButton, BorderLayout.WEST);

            JButton btnNewButton_1 = new JButton("Finance");
            btnNewButton_1.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent arg0) {
                    Login login = new Login();
                }
            });
            contentPane.add(btnNewButton_1, BorderLayout.CENTER);

            JButton btnNewButton_2 = new JButton("System Admin");
            contentPane.add(btnNewButton_2, BorderLayout.EAST);

            JLabel lblNewLabel = new JLabel("Welcome");
            contentPane.add(lblNewLabel, BorderLayout.NORTH);
        }

    }

Вот мой код для формы входа

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JPasswordField;
import javax.swing.JButton;
import javax.swing.JPanel;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class Login extends JFrame {

    private JLabel label1, label2;
    private JButton submit;
    private JTextField textfield1;
    private JPasswordField passfield;
    private JPanel panel;

    public Login() {

        setSize(300, 100);
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        label1 = new JLabel("User ID:");
        textfield1 = new JTextField(15);
        label2 = new JLabel("Password:");
        passfield = new JPasswordField(15);
        submit = new JButton("Submit");
        panel = new JPanel(new GridLayout(3, 1));

        panel.add(label1);
        panel.add(textfield1);
        panel.add(label2);
        panel.add(passfield);
        panel.add(submit);
        add(panel, BorderLayout.CENTER);

        ButtonHandler handler = new ButtonHandler();
        submit.addActionListener(handler);
    }// end login constructor

    private class ButtonHandler implements ActionListener {

        public void actionPerformed(ActionEvent event) {

            String user = textfield1.getText();
            char[] passChars = passfield.getPassword();
            Connection conn = Jdbc.dbConn();
            PreparedStatement ps = null;
            ResultSet rs = null;
            String pass = new String(passChars);

            if (passChars != null) {
                String sql = "SELECT employee_ID, employee_password FROM  user WHERE employee_ID = ? AND employee_password = ?";

                try {
                    ps = conn.prepareStatement(sql);
                    ps.setString(1, user);
                    ps.setString(2, pass);
                    rs = ps.executeQuery();
                    if (rs.next()) {
                        JOptionPane.showMessageDialog(null,"Welcome! "+user);
                    } else {
                        JOptionPane.showMessageDialog(null, "Wrong Input");
                    }
                } catch (Exception e) {
                        e.printStackTrace();
                } finally {
                    try {
                        rs.close();
                        ps.close();
                        conn.close();
                    } catch (Exception ee) {
                            ee.printStackTrace();
                    }
                }
            }// end actionPerformed
        }// End ButtonHandler
    }// End of class
}

Ответы [ 2 ]

3 голосов
/ 08 декабря 2011

Некоторые предложения:

  1. Не используйте setBounds() для MainWindow (JFrame).Используйте макет и в конце используйте pack().Если вы хотите установить размер вручную, вы также можете использовать setSize().
  2. . Чтобы закрыть текущее окно и открыть фрейм входа, добавьте setVisible(false) или dispose(), создайте объект входа и сделайте его видимым.

  3. Чтобы рамка была в центре, попробуйте setLocationRelativeTo(null);.

  4. Не используйте имена переменных, такие как label1, textFiled2, btnNewButtonи т. д. Используйте собственные имена для правильной переменной, которая отражает ее использование.

Пример для пункта 2:

    btnNewButton_1.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            setVisible(false);
            Login login = new Login();
        }
    });
3 голосов
/ 08 декабря 2011

Вам необходимо тщательно выбрать менеджер макета , чтобы удовлетворить ваши потребности. В настоящее время вы используете BorderLayout, который, кажется, не делает то, что вы хотите.

Попробуйте добавить три кнопки к JPanel и затем установить эту панель в качестве панели содержимого вашего фрейма. JPanel использует FlowLayout по умолчанию, что должно сработать.

...