2015-07-06 3 views
0

Я начал работать над расширением проекта, над которым я работал в течение нескольких месяцев, и я почувствовал необходимость вытащить его из консоли и ввести в него графическое окно. Пока все идет отлично! Кроме того, когда я пытаюсь проверить кнопку «Вход» (просто я могу ограничить, кто ее использует, и посмотреть, смогу ли я это сделать). Слушатель действия не отвечает, как я надеялся. Вот код:JButton не добавляет JLabel с ActionListener

import java.awt.EventQueue; 

import javax.swing.JFrame; 
import javax.swing.JButton; 
import java.awt.BorderLayout; 
import javax.swing.JPanel; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 
import javax.swing.JLabel; 
import java.awt.Color; 
import javax.swing.JTextField; 
import javax.swing.JTextPane; 
import javax.swing.JLayeredPane; 


public class Main { 

private JFrame frame; 
private JTextField textField; 
private JTextField textField_1; 

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

/** 
* Create the application. 
*/ 
public Main() { 
    initialize(); 
} 

/** 
* Initialize the contents of the frame. 
*/ 
private void initialize() { 
    frame = new JFrame(); 
    frame.getContentPane().setForeground(Color.GREEN); 
    frame.setBounds(100, 100, 612, 389); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.getContentPane().setLayout(null); 

    JLabel lblUserName = new JLabel("User name"); 
    lblUserName.setBackground(Color.YELLOW); 
    lblUserName.setBounds(158, 70, 67, 25); 
    frame.getContentPane().add(lblUserName); 

    JLabel lblPassword = new JLabel("Password"); 
    lblPassword.setBounds(158, 146, 53, 14); 
    frame.getContentPane().add(lblPassword); 

    textField = new JTextField(); 
    textField.setBounds(235, 143, 118, 20); 
    frame.getContentPane().add(textField); 
    textField.setColumns(10); 

    textField_1 = new JTextField(); 
    textField_1.setColumns(10); 
    textField_1.setBounds(235, 72, 118, 20); 
    frame.getContentPane().add(textField_1); 

    JButton btnLogin = new JButton("Login"); 
    btnLogin.setBounds(151, 228, 256, 61); 
    frame.getContentPane().add(btnLogin); 
    btnLogin.addActionListener(new ActionListener() { 

     public void actionPerformed(ActionEvent e) 
     { 
      if(textField.equals("Admin")) 
      { 
       if(textField.equals("Admin")) 
       { 
        JLabel lblLoginSuccessPlease = new JLabel("LOGIN SUCCESS! Please wait while the other functions are loaded"); 
        lblLoginSuccessPlease.setBounds(124, 204, 344, 14); 
        frame.getContentPane().add(lblLoginSuccessPlease); 

       } 
      } 

     } 
    });  

    JLabel lblWelcomeToMy = new JLabel("Welcome to my amazing program!"); 
    lblWelcomeToMy.setBounds(174, 11, 242, 14); 
    frame.getContentPane().add(lblWelcomeToMy); 
    } 
} 

Я пытался использовать & &, чтобы проверить как имя пользователя и пароль ящика, и он не будет работать. Кроме того, если кто-то может проинструктировать меня о том, как сделать поле «Пароль», будут маскироваться символы, которые будут чрезвычайно полезны.

+0

Я поставил это как вопрос программирования в своем уме ... Итак, я отправил сообщение об обмене пакетами программ. – Groax

+1

Это не «программирование», это «программисты». Вопросы реализации здесь не обсуждаются. – durron597

+0

Ах, извините. Может быть, нет, я получу ответ на переполнение стека, поскольку он был перенесен. – Groax

ответ

0
  1. frame имеет частный доступ в Main класса

    private JFrame frame; 
    

    изменения его государственной или удалить модификатор

  2. Чтобы получить текст JTextField использовать textfield.getText()

    //if (textField.equals("Admin")) {wrong 
         if (textField.getText().equals("Admin")) {//right way 
    
  3. Вы должны проверить пароль, но не имя пользователя снова

    if (textField_1.getText().equals("Admin")) { 
          f (textField.getText().equals("Admin")) {//this is the password field 
    
  4. Чтобы скрыть пароли, которые Вы должны использовать JPasswordField .so создать как

    private JPasswordField textField; 
    

    и инициализировать как

    textField = new JPasswordField(); 
    

    и проверьте, как

    if (textField_1.getText().equals("Admin")) { 
          if (String.valueOf(textField.getPassword()).equals("Admin")) { 
           JLabel lblLoginSuccessPlease = new JLabel("LOGIN SUCCESS! Please wait while the other functions are loaded"); 
           lblLoginSuccessPlease.setBounds(124, 204, 344, 14); 
           frame.getContentPane().add(lblLoginSuccessPlease); 
    
          } 
         } 
    
+0

спасибо, я использовал мой строитель окон и заметил, что сразу после того, как я разместил его и рассердился на себя за то, что не обратил внимания – Groax

1
if(textField.equals("Admin")) 
     { 
      if(textField.equals("Admin")) 
      { 
       JLabel lblLoginSuccessPlease = new JLabel("LOGIN SUCCESS! Please wait while the other functions are loaded"); 
       lblLoginSuccessPlease.setBounds(124, 204, 344, 14); 
       frame.getContentPane().add(lblLoginSuccessPlease); 

      } 
     } 

Прежде всего, нет необходимости проверять, равнозначен ли textField «Администратору» дважды.

Но основная проблема заключается в том, что текстовое поле, являющееся белым прямоугольником, принимающим входные данные в пользовательском интерфейсе, всегда равно строке, которая представляет собой последовательность символов.

То, что вы хотите, чтобы проверить, является ли текст, введенный в текстовое поле равно «Admin»:

if (textField.getText().equals("Admin")) 

Ваш код имеет другие проблемы:

  • , используя абсолютные координаты вместо использования a layout manager
  • динамически добавляет элементы в рамку вместо их добавления с самого начала и просто делает их видимыми при необходимости. Нужно добавить, но тогда GUI должен быть пересмотрен.
+0

спасибо! Кроме того, я думаю, я, должно быть, забыл textField_1, чтобы проверить, теперь, когда я знаю, как получить текст из этого окна, а затем проверить. Это должно сделать его намного легче для меня. Кроме того, с менеджером компоновки это ограничило меня тем, что мои кнопки были выровнены, как мне понравилось, в виде списка из 2 или 3 столбцов, каждый из которых имеет немного пространства между ними. Я попытаюсь переделать его на некоторое время (в одном с менеджером), но я собираюсь сделать это законченным, потому что у меня есть несколько друзей, которые хотят его протестировать. :) Еще раз спасибо. – Groax