簡體   English   中英

單擊按鈕打開新框架

[英]Opening new frame on button click

我有三個不同的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);
}

}

單擊第一堂課上的按鈕后應顯示的第二堂課。

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;
}
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中放置一個對您創建的frame的引用,然后將其傳遞給動作偵聽器,當您創建新面板PersonInfo ,可以將其添加到主框架。

更新!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM