2014-09-20 36 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) { 
    } 
} 

在我的其他類,幾乎任何事情,因爲類本身依賴於進口的字符串變量

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

我自己,我將顯示上述GUI爲模式的JDialog,而不是作爲一個JFrame,我會用一個JPasswordField中,而不是第二個JTextField中,我願意付出我的類公共getter方法將允許調用類來查詢其字段的狀態,像

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他的輸入,我非常感激,當我回家時,我計劃測試和修補很多新信息! – 2014-09-22 11:41:20

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

我知道我並不需要一個,但我更願意有另一個類運行這只是爲了保持事情的好和分離,再加上它更容易擴展到 – 2014-09-22 11:36:03

相關問題