2017-03-27 15 views
1

私は間違った認証に関するメッセージを表示するためにloginLabelというラベルを作成しました。私はactionPerformedメソッド内にこのロジックを保持していますが、私はloginLabel can not be resolvedというエラーが発生しています。このエラーを取り除くには?私はウィンドウビルダを使ってGUIを作成しました。ラベル名を解決できません

import java.awt.EventQueue; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.border.LineBorder; 
import java.awt.Color; 
import javax.swing.JLabel; 
import java.awt.Font; 
import javax.swing.JTextField; 
import javax.swing.JPasswordField; 
import javax.swing.JButton; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 
import java.sql.*; 

public class FirstView { 

    private JFrame frmFirstProject; 
    private JTextField txtUsername; 
    private JPasswordField txtPassword; 

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

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

    /** 
    * Initialize the contents of the frame. 
    */ 
    private void initialize() { 
     frmFirstProject = new JFrame(); 
     frmFirstProject.getContentPane().setBackground(new Color(51, 204, 204)); 
     frmFirstProject.setTitle("first project"); 
     frmFirstProject.setBounds(100, 100, 714, 491); 
     frmFirstProject.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frmFirstProject.getContentPane().setLayout(null); 

     JPanel panel = new JPanel(); 
     panel.setBorder(new LineBorder(new Color(0, 0, 0), 3)); 
     panel.setBounds(63, 47, 580, 354); 
     frmFirstProject.getContentPane().add(panel); 
     panel.setLayout(null); 

     JLabel lblUsername = new JLabel("Username:"); 
     lblUsername.setBounds(24, 25, 69, 22); 
     panel.add(lblUsername); 

     JLabel lblPassword = new JLabel("Password:"); 
     lblPassword.setBounds(24, 66, 69, 22); 
     panel.add(lblPassword); 

     txtUsername = new JTextField(); 
     txtUsername.setBounds(97, 26, 86, 20); 
     panel.add(txtUsername); 
     txtUsername.setColumns(10); 

     txtPassword = new JPasswordField(); 
     txtPassword.setBounds(97, 67, 86, 20); 
     panel.add(txtPassword); 

     JButton btnsubmit = new JButton("submit"); 
     frmFirstProject.getRootPane().setDefaultButton(btnsubmit); //enter key 
     btnsubmit.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent arg0) { 
       try { 
        int val = 0; 
        Connection sqlCon = DB_con.getSQLConnection(); 
        PreparedStatement ps = sqlCon.prepareStatement("select 1 from tbl_user_info where username = ? and password = ?"); 
        ps.setString(1, txtUsername.getText().toUpperCase()); 
        ps.setString(2, String.valueOf(txtPassword.getPassword()).toUpperCase()); 
        ResultSet rs = ps.executeQuery(); 
        if (rs.next()) { 
         val = rs.getInt(1); 
        } 
        if(val != 1) 
        { 
         loginLabel.setVisible(true); 
        } 
        System.out.println("the value is: "+val); 
        sqlCon.close(); 
        System.exit(0); 
       } catch (Exception e) { 
        System.out.println(e.toString()); 
       } 

      } 
     }); 
     btnsubmit.setBounds(94, 125, 89, 23); 
     panel.add(btnsubmit); 

     JPanel panel_display = new JPanel(); 
     panel_display.setBounds(36, 181, 355, 50); 
     panel.add(panel_display); 
     panel_display.setLayout(null); 

     JLabel loginLabel = new JLabel("Login Authentication Mismatched. Please try again."); 
     loginLabel.setFont(new Font("Tahoma", Font.PLAIN, 13)); 
     loginLabel.setBounds(10, 11, 319, 28); 
     panel_display.add(loginLabel); 
     loginLabel.setVisible(false); 

     JLabel lbl_header = new JLabel("LIBRARY MANAGEMENT SYSTEM"); 
     lbl_header.setFont(new Font("Tahoma", Font.BOLD, 14)); 
     lbl_header.setBounds(211, 11, 288, 25); 
     frmFirstProject.getContentPane().add(lbl_header); 
    } 
} 
+0

インスタンスフィールドに 'loginLabel'を設定するか、' ActionListener'の前に宣言する必要があります – MadProgrammer

+0

この質問の更新はありますか? –

答えて

-1

あなたはこのコードを持って前にJLabel loginLabel

if(val != 1) 
{ 
    loginLabel.setVisible(true); 
} 

を宣言あなたはJLabel後にすべてのbtnsubmit.addActionListenerコードを移動する必要があります。

private void initialize() { 
     frmFirstProject = new JFrame(); 
     frmFirstProject.getContentPane().setBackground(new Color(51, 204, 204)); 
     frmFirstProject.setTitle("first project"); 
     frmFirstProject.setBounds(100, 100, 714, 491); 
     frmFirstProject.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frmFirstProject.getContentPane().setLayout(null); 

     JPanel panel = new JPanel(); 
     panel.setBorder(new LineBorder(new Color(0, 0, 0), 3)); 
     panel.setBounds(63, 47, 580, 354); 
     frmFirstProject.getContentPane().add(panel); 
     panel.setLayout(null); 

     JLabel lblUsername = new JLabel("Username:"); 
     lblUsername.setBounds(24, 25, 69, 22); 
     panel.add(lblUsername); 

     JLabel lblPassword = new JLabel("Password:"); 
     lblPassword.setBounds(24, 66, 69, 22); 
     panel.add(lblPassword); 

     txtUsername = new JTextField(); 
     txtUsername.setBounds(97, 26, 86, 20); 
     panel.add(txtUsername); 
     txtUsername.setColumns(10); 

     txtPassword = new JPasswordField(); 
     txtPassword.setBounds(97, 67, 86, 20); 
     panel.add(txtPassword); 

     JButton btnsubmit = new JButton("submit"); 
     frmFirstProject.getRootPane().setDefaultButton(btnsubmit); //enter key 

     JPanel panel_display = new JPanel(); 
     panel_display.setBounds(36, 181, 355, 50); 
     panel.add(panel_display); 
     panel_display.setLayout(null); 

     JLabel loginLabel = new JLabel("Login Authentication Mismatched. Please try again."); 
     loginLabel.setFont(new Font("Tahoma", Font.PLAIN, 13)); 
     loginLabel.setBounds(10, 11, 319, 28); 
     panel_display.add(loginLabel); 
     loginLabel.setVisible(false); 

     JLabel lbl_header = new JLabel("LIBRARY MANAGEMENT SYSTEM"); 
     lbl_header.setFont(new Font("Tahoma", Font.BOLD, 14)); 
     lbl_header.setBounds(211, 11, 288, 25); 
     frmFirstProject.getContentPane().add(lbl_header); 

     btnsubmit.addActionListener(new ActionListener() { //change to here 
      public void actionPerformed(ActionEvent arg0) { 
       try { 
        int val = 0; 
        Connection sqlCon = DB_con.getSQLConnection(); 
        PreparedStatement ps = sqlCon.prepareStatement("select 1 from tbl_user_info where username = ? and password = ?"); 
        ps.setString(1, txtUsername.getText().toUpperCase()); 
        ps.setString(2, String.valueOf(txtPassword.getPassword()).toUpperCase()); 
        ResultSet rs = ps.executeQuery(); 
        if (rs.next()) { 
         val = rs.getInt(1); 
        } 
        if(val != 1) 
        { 
         loginLabel.setVisible(true); 
        } 
        System.out.println("the value is: "+val); 
        sqlCon.close(); 
        System.exit(0); 
       } catch (Exception e) { 
        System.out.println(e.toString()); 
       } 

      } 
     }); 
     btnsubmit.setBounds(94, 125, 89, 23); 
     panel.add(btnsubmit); 

    } 

私はそれは私が非finalローカル変数のエラーを参照することはできません得ていないだろう理由ですが、Javaのバージョン1.8を使用しています。

+0

上記の意味は? – nischalinn

+0

もう一度.... –

+0

loginLabelを 'final'変数として宣言するか、' initialize() 'メソッドの外にあるフィールドを作成するか、ActionListener内の参照を引き続き作成する必要がありますそれを解決することはできません。 –

0

以前にbtnSubmitに追加した匿名のActionListenerクラス内のローカル変数loginLabelを参照しています。これは、ActionListenerクラス(または他のクラス)内のコードがメソッドのローカル変数を参照することができないため、機能しません。

代わりにあなたがアップクラスの最上部に、フィールドとしてloginLabelを宣言する必要があります。

private JPasswordField txtPassword; 
private JLabel loginLabel; 

をこれには、(クラス内のすべてのメソッドとも、あなたのクラス内で定義されたすべての非静的クラスに見えます前述のようにActionListener)。 ActionListenerのは、Java 8で十分です前loginLabelの定義

loginLabel = new JLabel("Login Authentication Mismatched. Please try again."); 

JLabel loginLabel = new JLabel("Login Authentication Mismatched. Please try again."); 

そして、単にからあなたのinitialize()メソッドの内部で、あなたのラベルを作成する行を変更java 8は、定義されているが変更されていないfinalフィールドを暗黙的にマークします。 Java 7以前をターゲットにしている場合、その変数を明示的にfinalにする必要があります。

+0

あなたの返信にはマイナスの印がついているのですが、わかりません。参加者が否定的なマーキングのコメントを残しておくとよいでしょう。 – nischalinn

+0

私は分かりません。 :( –

関連する問題