2014-09-20 4 views
1

Я создаю приложение для входа в систему для установки на своем беспроводном жестком диске, и в настоящее время я создаю для него фреймворки (каждый раз, когда я пытаюсь объявить строки как что-либо, но окончательно, он показывает ошибку, говорящую только окончательно). Я пытаюсь использовать пользователь и строки проходят, если заявления, которые находятся в моем классе Скелет:Как ссылаться на строку в другом классе?

package open; 

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JFrame; 

public class Skeleton extends JFrame implements ActionListener{ 
    private static final long serialVersionUID = 1248L; 

public static void addComponentsToPane(Container pane, Container container) { 
    //Adding in text fields for login 
    JButton b1 = new JButton("Login"); 
    final JTextField field2 = new JTextField(2); 
    final JTextField field = new JTextField(1); 

    //Creating Box Layout - Subject to change 
    GroupLayout layout = new GroupLayout(pane); 
    pane.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS)); 
    layout.setAutoCreateGaps(true); 
    layout.setAutoCreateContainerGaps(true); 

    //Setting alignments 
    b1.setAlignmentX(Component.CENTER_ALIGNMENT); 
    field.setAlignmentY(BOTTOM_ALIGNMENT); 
    field2.setAlignmentY(BOTTOM_ALIGNMENT); 
    b1.setAlignmentY(CENTER_ALIGNMENT); 

    //Dimensions for User 
    field.setMaximumSize(new Dimension(235, 20)); 
    field.setMinimumSize(new Dimension(235, 20)); 

    //Dimensions for Password 
    field2.setMaximumSize(new Dimension(235, 20)); 
    field2.setMinimumSize(new Dimension(235, 20)); 

    //Dimensions for Button 
    b1.setMaximumSize(new Dimension(100, 40)); 
    b1.setMinimumSize(new Dimension(100, 40)); 

    //Adding space between components 
    container.add(Box.createRigidArea(new Dimension(275,20))); 
    container.add(field); 
    container.add(Box.createRigidArea(new Dimension(275,10))); 
    container.add(field2); 
    container.add(Box.createRigidArea(new Dimension(275,12))); 
    container.add(b1); 

    //Listen to the login button 
    b1.addActionListener(new ActionListener(){ 
     public void actionPerformed(ActionEvent e) 
     { 
      String user = field.getText(); 
      String pass = field2.getText(); 
      System.out.println("Value: " + user + " " + pass); 
     }; 
    }); 
} 

    public static void createAndShowGUI() { 

     JFrame frame = new JFrame("User Login"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
     addComponentsToPane(frame.getContentPane(), frame); 

     //Create a grey label 
     JLabel greyLabel = new JLabel(); 
     greyLabel.setOpaque(true); 
     greyLabel.setBackground(new Color(205, 209, 209)); 
     greyLabel.setPreferredSize(new Dimension(300, 400)); 

     //Adding the label to the pane 
     frame.getContentPane().add(greyLabel, BorderLayout.CENTER);  

     //Display the window. 
     frame.setSize(275, 175); 
     frame.setVisible(true); 
     } 

    public static void closer(boolean close, JFrame frame){ 
     System.out.println(close); 
     if(close == true){ 
      frame.setVisible(false); 
      frame.dispose(); 
      } 
     } 
    public static void main(String[] args) { 
     javax.swing.SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       createAndShowGUI(); 
       } 
      }); 
     } 
public void actionPerformed(ActionEvent arg0) { 
    } 
} 

в моем другом классе нет почти ничего, потому что сам класс зависит от импорта переменных типа String

package password; 

import open.Skeleton; 
import refrence.Resources; 

public class PasswordCompare  
{ 
public static void main(String[] args) 
    { 
    System.out.println(user); 
    System.out.println(pass); 
    } 
} 

ответ

2

Myself, я показал бы выше графический интерфейс, как модальный JDialog, а не как JFrame, я хотел бы использовать JPasswordField вместо 2 JTextField, и я дам публичные методы геттера, которые позволили бы моему классу вызов класса для запроса состояния своих полей, что-то вроде

public String getUserName() { 
    return userNameTextField.getText(); 
} 

и

public char[] getPassword() { 
    return passwordField.getPassword(); 
} 

Обратите внимание, что пароли почти никогда не должны быть обработаны как строки, так как это было бы в вносят существенную уязвимость в ваше приложение, что облегчает другим пользователям извлечение паролей.

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


Обратите внимание, что ваш код использует статические методы, то, что вы не хотите делать, так как, делая это, ваш класс не имеет «состояния», и таким образом запрашивая для значений, хранящихся в JTextFields выиграл» т работы.


Редактировать
Например:

import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.Insets; 

import javax.swing.*; 

public class MySkeleton extends JPanel { 
    private static final int COLUMN_COUNT = 10; 
    private static final int I_GAP = 3; 
    private JTextField userNameField = new JTextField(); 
    private JPasswordField passwordField = new JPasswordField(); 

    public MySkeleton() { 
     super(new GridBagLayout()); 
     userNameField.setColumns(COLUMN_COUNT); 
     passwordField.setColumns(COLUMN_COUNT); 

     GridBagConstraints gbc = getGbc(0, 0, GridBagConstraints.BOTH); 
     add(new JLabel("User Name:"), gbc); 
     gbc = getGbc(1, 0, GridBagConstraints.HORIZONTAL); 
     add(userNameField, gbc); 
     gbc = getGbc(0, 1, GridBagConstraints.BOTH); 
     add(new JLabel("Password:"), gbc); 
     gbc = getGbc(1, 1, GridBagConstraints.HORIZONTAL); 
     add(passwordField, gbc); 
    } 

    public static GridBagConstraints getGbc(int x, int y, int fill) { 
     GridBagConstraints gbc = new GridBagConstraints(); 
     gbc.gridx = x; 
     gbc.gridy = y; 
     gbc.gridwidth = 1; 
     gbc.gridheight = 1; 
     gbc.weightx = 1.0; 
     gbc.weighty = 1.0; 
     gbc.insets = new Insets(I_GAP, I_GAP, I_GAP, I_GAP); 
     gbc.fill = fill; 

     return gbc; 
    } 

    public String getUserName() { 
     return userNameField.getText(); 
    } 

    public char[] getPassword() { 
     return passwordField.getPassword(); 
    } 
} 

, которые могут быть проверены в другом классе через:

public class MySkeletonTest { 
    private static void createAndShowGui() { 
     MySkeleton mainPanel = new MySkeleton(); 

     int input = JOptionPane.showConfirmDialog(null, mainPanel, "Login", 
      JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); 
     if (input == JOptionPane.OK_OPTION) { 
     System.out.println("User Name: " + mainPanel.getUserName()); 

     // **** for testing purposes only. Never do this in a real app. 
     System.out.println("Password: " + new String(mainPanel.getPassword())); 
     } 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowGui(); 
     } 
     }); 
    } 
} 
+0

Спасибо за все t он вводит, я очень ценю это, много новой информации, которую я планирую тестировать и возиться, когда я прихожу домой! –

0

Вы действительно уверены, что вам нужен класс для сравнения паролей? Это должен быть код вашего ActionListener. Кроме того, вы даже не создаете код Skeleton в своем коде, так что вы не можете получить доступ к этим полям. Если вам действительно нужно это сделать, просто определите некоторые геттеры на Skeleton.

public String getPassword() { 
    return field2.getText(); //you should really rename this field 
} 

public String getUser() { 
    return field.getText(); //you should really rename this field 
} 
+0

Я знаю, что он не нужен, но я предпочел бы есть еще один класс, выполняющий это только для того, чтобы держать вещи красивыми и разделенными, плюс это облегчает расширение позже на –

Смежные вопросы