2016-05-29 7 views
0

私は3つのGUIが違って見え、クラスに変数を格納しています。特定のボタンをクリックすると、次のフレームに切り替えることはできません。また、変数の値を保持することもできません。例:textFieldに何かを入力すると、テキストが変数に文字列として格納され、次のGUIで使用できるようになります。私は静かではないので、私はここで尋ねているので、これを行う方法を確認します。ボタンをクリックして新しいフレームを開く

ボタンクリックで次のクラスのGUIに変更する必要があるファーストクラスのGUIです。

public class SearchTripList extends JPanel { 
private JList list; 
private DefaultListModel clientListElements; 
// private static String[] colornames = { "black", "blue", "red", "white" }; 
// private static Color[] colors = { Color.BLACK, Color.BLUE, Color.RED, 
// Color.WHITE }; 
private JTextField tfDest = new JTextField(); 
private int listRader = 0; 
private ResultSet myRs; 
private JPanel pnlCenter = new JPanel(new BorderLayout()); 
private JPanel pnlSouth = new JPanel(new GridLayout(3, 1)); 
private JPanel pnlNorth = new JPanel(new GridLayout(1, 4)); 
private String dest; 
private JLabel lvlVeckaAvgang = new JLabel("Vecka avgång"); 
private JLabel lblStad = new JLabel("Destination"); 
private JLabel lblTidAvgang = new JLabel("Tid avgång"); 
private JLabel lblAvgangFran = new JLabel ("Avgång från"); 
private String m = "        "; 
JButton btnSearch = new JButton("sök"); 
JButton btnDone = new JButton("Färdigställ"); 
private Controller controller; 

public SearchTripList() throws SQLException { 
    setLayout(new BorderLayout()); 
    clientListElements = new DefaultListModel(); 
    list = new JList(clientListElements); 
    list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 
    list.setVisibleRowCount(listRader); 
    pnlCenter.add(new JScrollPane(list)); 
    add(pnlCenter, BorderLayout.CENTER); 
    add(pnlNorth, BorderLayout.NORTH); 
    add(pnlSouth, BorderLayout.SOUTH); 
    pnlNorth.add(lvlVeckaAvgang); 
    pnlNorth.add(lblStad); 
    pnlNorth.add(lblTidAvgang); 
    pnlNorth.add(lblAvgangFran); 
    // pnlCenter.add(new JScrollPane(list)); 

    // list.addListSelectionListener(new ListSelectionListener() { 
    // public void valueChanged(ListSelectionEvent event) { 
    // // setBackground(colors[list.getSelectedIndex()]); 
    // 
    // } 
    // }); 
    pnlSouth.add(tfDest); 
    pnlSouth.add(btnSearch); 
    pnlSouth.add(btnDone); 
    createListeners(); 

} 

public void createListeners() { 
    Listener list = new Listener(); 

    btnSearch.addActionListener(list); 
    btnDone.addActionListener(list); 
} 

private class Listener implements ActionListener { 
    public void actionPerformed(ActionEvent e) { 
     if (e.getSource() == btnSearch) { 

      dest = tfDest.getText(); 
      try { 
       connect(); 
       writeData(); 
      } catch (SQLException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 

     }else if (e.getSource()== btnDone){ 

// controller.kvitto();一度表示されます }

} 

} 

public void writeData() throws SQLException { 
    String temp = null; 
    while (myRs.next()) { 
     listRader++; 
     temp = myRs.getString("veckaAvgang") + m + myRs.getString("destination")+m+ myRs.getString("avgangTid")+m+myRs.getString("avgangFran"); 
     clientListElements.addElement(temp); 
    } 

} 

public void connect() { 
    try { 
     // 1 Get a connection to database 
     java.sql.PreparedStatement myStmt = null; 
     Connection myConn = DriverManager.getConnection("jdbc:mysql://localhost:3306/x", "a", "b"); 
     String sql = "SELECT * FROM Tur WHERE destination = ? "; 
     // 2. Create a statement 
     myStmt = myConn.prepareStatement(sql); 
     myStmt.setString(1, dest); 
     // 3. Execute SQL query 
     myRs = myStmt.executeQuery(); 
     System.out.println("Connect"); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

public static void main(String[] a) throws SQLException { 
    JFrame frame = new JFrame(); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.add(new SearchTripList()); 
    frame.pack(); 
    frame.setSize(400, 400); 
    frame.setVisible(true); 
} 

}

第二のクラスは、最初classs上のボタンをクリック。

public class PersonInfo extends JPanel { 

private JLabel lblForNamn = new JLabel("För namn"); 
private JLabel lblEfterNamn = new JLabel("Efter namn"); 
private JLabel lblAdress = new JLabel("Address"); 
private JLabel lblPersonNr = new JLabel("Person nummer (10 siffror)"); 
private JLabel lblTelefonNr = new JLabel("Telefon nummer"); 

private JTextField tfForNamn = new JTextField(); 
private JTextField tfEfterNamn = new JTextField(); 
private JTextField tfAdress = new JTextField(); 
private JTextField tfPersonNr = new JTextField(); 
private JTextField tfTelefonNr = new JTextField(); 
private JButton btnVidare = new JButton("Vidare"); 
private JButton btnAvbryt = new JButton("Avbryt"); 

private JFrame frame; 

private String forNamn; 
private String efterNamn; 
private String adress; 
private String prNr; 
private long telefonNr = 0; 

private Controller controller; 
public PersonInfo() { 
    setPreferredSize(new Dimension(500, 600)); 
    setLayout(null); 

    lblForNamn.setLocation(55, 15); 
    lblForNamn.setSize(80, 50); 
    add(lblForNamn); 
    tfForNamn.setLocation(50, 50); 
    tfForNamn.setSize(400, 50); 
    add(tfForNamn); 

    lblEfterNamn.setLocation(55, 100); 
    lblEfterNamn.setSize(80, 50); 
    add(lblEfterNamn); 
    tfEfterNamn.setLocation(50, 135); 
    tfEfterNamn.setSize(400, 50); 
    add(tfEfterNamn); 

    lblAdress.setLocation(55, 185); 
    lblAdress.setSize(80, 50); 
    add(lblAdress); 
    tfAdress.setLocation(50, 220); 
    tfAdress.setSize(400, 50); 
    add(tfAdress); 

    lblPersonNr.setLocation(55, 270); 
    lblPersonNr.setSize(200, 50); 
    add(lblPersonNr); 
    tfPersonNr.setLocation(50, 305); 
    tfPersonNr.setSize(400, 50); 
    add(tfPersonNr); 

    lblTelefonNr.setLocation(55, 355); 
    lblTelefonNr.setSize(150, 50); 
    add(lblTelefonNr); 
    tfTelefonNr.setLocation(50, 390); 
    tfTelefonNr.setSize(400, 50); 
    add(tfTelefonNr); 

    btnVidare.setLocation(275, 500); 
    btnVidare.setSize(200, 50); 
    add(btnVidare); 

    btnAvbryt.setLocation(25, 500); 
    btnAvbryt.setSize(200, 50); 
    add(btnAvbryt); 
    createListeners(); 
    this.controller = controller; 
} 

public void insertData() { 
    try { 
     // 1 Get a connection to database 
     Connection myConn = DriverManager.getConnection("jdbc:mysql://localhost:3306/x", "a", "b"); 
     // 2. Create a statement 
     Statement myStmt = myConn.createStatement(); 
     // 3. Execute SQL query 
     String sq1 = "insert into Resenar" + " (personNr, teleNr, adress, forNamn, efterNamn)" + "values(" + prNr 
       + ", " + telefonNr + ", '" + adress + "', '" + forNamn + "', '" + efterNamn + "')"; 

     myStmt.executeUpdate(sq1); 
     System.out.println("Insert complete"); 
     // Namn som primärnyckel fungerade inte så bra då det fanns fler 
     // namn. 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

public void createListeners() { 
    Listener list = new Listener(); 

    btnVidare.addActionListener(list); 
} 

private class Listener implements ActionListener { 
    public void actionPerformed(ActionEvent e) { 
     if (e.getSource() == btnVidare) { 
      forNamn = tfForNamn.getText(); 
      efterNamn = tfEfterNamn.getText(); 
      adress = tfAdress.getText(); 
      prNr = tfPersonNr.getText(); 
      telefonNr = Integer.parseInt(tfTelefonNr.getText()); 
      insertData(); 

     }else if(e.getSource()==btnAvbryt){ 
      System.exit(0); 
     } 
    } 
} 


public static void main(String[] a) { 
    PersonInfo pi = new PersonInfo(); 
    JFrame frame = new JFrame("Person information"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.add(new PersonInfo()); 
    frame.pack(); 
    frame.setResizable(false); 
    frame.setVisible(true); 
} 

public String getForNamn() { 
    // TODO Auto-generated method stub 
    return forNamn; 
} 
+0

2番目のクラスの 'main'に行ったことはなぜできませんか?それは同じコードであるように見えます。 – 4castle

+0

あなたが何を意味するかを静かにキャッチしないでください。あなたは\tを に入れなければならないのですか?JFrame frame = new JFrame(); \t \t frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); \t \t frame.add(new SearchTripList()); \t \t frame.pack(); \t \t frame.setSize(400,400); \t \t frame.setVisible(true); ボタンのアクションリスナーには? –

+0

はい、そこには 'new PersonInfo()'だけがあります。 – 4castle

答えて

0
public static void main(String[] a) throws SQLException { 
    JFrame frame = new JFrame(); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    **frame.add(new SearchTripList(this));** 
    frame.pack(); 
    frame.setSize(400, 400); 
    frame.setVisible(true); 
} 


**private JFrame mainFrame; 
public SearchTripList(JFrame mainFrame) throws SQLException { 
    this.mainFrame = mainFrame;** 
    setLayout(new BorderLayout()); 
    clientListElements = new DefaultListModel(); 
    list = new JList(clientListElements); 
    list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 
    list.setVisibleRowCount(listRader); 
    pnlCenter.add(new JScrollPane(list)); 
    add(pnlCenter, BorderLayout.CENTER); 
    add(pnlNorth, BorderLayout.NORTH); 
    add(pnlSouth, BorderLayout.SOUTH); 
    pnlNorth.add(lvlVeckaAvgang); 
    pnlNorth.add(lblStad); 
    pnlNorth.add(lblTidAvgang); 
    pnlNorth.add(lblAvgangFran); 
    // pnlCenter.add(new JScrollPane(list)); 

    // list.addListSelectionListener(new ListSelectionListener() { 
    // public void valueChanged(ListSelectionEvent event) { 
    // // setBackground(colors[list.getSelectedIndex()]); 
    // 
    // } 
    // }); 
    pnlSouth.add(tfDest); 
    pnlSouth.add(btnSearch); 
    pnlSouth.add(btnDone); 
    createListeners(); 

} 

private class Listener implements ActionListener { 
    **JFrame mainFrame; 
    public Listener(JFrame mainFrame){ 
     this.mainFrame = mainFrame; 
    }** 
    public void actionPerformed(ActionEvent e) { 
     if (e.getSource() == btnSearch) { 

      dest = tfDest.getText(); 
      try { 
       connect(); 
       writeData(); 
      } catch (SQLException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 

     }else if (e.getSource()== btnDone){ 
      **PersonInfo newPanel = new PersonInfo(some variables); 
      this.mainFrame.add(newPanel);** 
    } 

} 

その後、アクションリスナーにそれを渡すあなたが最初のクラスのコンストラクタでメインで作成したframeへの参照を入れて、あなたがPersonInfo新しいパネルを作成するときには、それを追加することができますメインフレーム。

更新済み!

+0

申し訳ありませんプログラミングは初めてですが、正確にadd(newFrame)に入れる必要があります。 newFrameの代わりに?私はnewFrameであるはずですが、私の場合はどうしたらいいですか?申し訳ありません愚かな質問 –

+0

あなたが変更する必要がある分数を投稿した答えを更新しました。 @ 4castleが彼のコメントで「新しいPersonInfo()」をアクションリスナーに入れて、新しいPersonInfo(変数)のように変数をコンストラクタに入れることができます –

+0

私のために働くようには思われません。 4キャッスルが提案した簡単な方法を使用します:)。それとも、そのような悪いうさぎですか? –

関連する問題