jFrame not opening correctly or showing contents

我的梦境 提交于 2019-12-11 05:47:53

问题


so I have a school project I need help on!

So I am doing a 'task force schedule' app as my major project for this year (Grade 11, south africa) and I am stuck. I have an login system that logs into the database fine, then I have a "check in station" class called CheckIn which has a button that should open a table showing all the people working in a given station at that time if they are checked in.

So far the table only pulls data from the database of everyone that is in the station, regardless of whether they are here or not, but that is not the issue.

The issue is that if I start the class Welcome (the station called 'Welcome') it runs fine showing the following image:

but when I try to open the welcome class from within the program (so I click on the quick link in the CheckIn class, it does this:

The code for the Welcome class works fine, I got it through a tutorial I copied from youtube, but it works 100%.

Is there something I am doing wrong???

Any advice would be greatly appreciated.

Thanks Josh

Here is the code, by the way :P : CheckIn class:

package co.za.gecko.inked.crm;

import java.awt.EventQueue;

public class CheckIn extends JFrame {
String u = (String) Login.cbxUsername.getSelectedItem();
static ArrayList<String> firstNames = new ArrayList<>();
JLabel lblHello = new JLabel("Hello, "+u.toString());
JLabel lblClock = new JLabel("");
static JComboBox cbxCIFirstName = new JComboBox();
static JComboBox cbxCILastName = new JComboBox();

// to add checked in people to pCI stands for personCheckedIn
static ArrayList<String> pCI = new ArrayList<>();

// all jLabels for the stations
JLabel lblWelcome = new JLabel("Welcome: 0");
JLabel lblScanning = new JLabel("Scanning: 0");
JLabel lblChecking = new JLabel("Checking: 0");
JLabel lblRunners = new JLabel("Runners: 0");
JLabel lblWrapping = new JLabel("Wrapping: 0");
JLabel lblFirstAid = new JLabel("First Aid: 0");
JLabel lblVolunteers = new JLabel("Volunteers: 0");

// all counters for the stations
int cWelcome = 0;
int cScanning = 0;
int cChecking = 0;
int cRunners = 0;
int cWrapping = 0;
int cFirstAid = 0;
int cVolunteers = 0;

// all stations with volunteer id in station
static ArrayList<String> inWelcomeStation = new ArrayList<>();
ArrayList<String> inScanningStation = new ArrayList<>();
ArrayList<String> inCheckingStation = new ArrayList<>();
ArrayList<String> inRunnersStation = new ArrayList<>();
ArrayList<String> inWrappingStation = new ArrayList<>();
ArrayList<String> inFirstAidStation = new ArrayList<>();
ArrayList<String> inVolunteersStation = new ArrayList<>();

JLabel lblCIStation = new JLabel("Welcome");
JLabel lblCITime = new JLabel("10:00");

/**
 * Launch the application.
 */
public static void main(String[] args) throws Exception{

    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                CheckIn frame = new CheckIn();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the frame.
 * @throws Exception 
 */
public CheckIn() throws Exception{

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 1024, 768);
    getContentPane().setLayout(null);


    lblHello.setFont(new Font("Tahoma", Font.PLAIN, 20));
    lblHello.setBounds(10, 11, 182, 25);
    getContentPane().add(lblHello);


    lblClock.setFont(new Font("Tahoma", Font.PLAIN, 20));
    lblClock.setBounds(941, 11, 57, 25);
    getContentPane().add(lblClock);

    JLabel lblDay = new JLabel("Day 1");
    lblDay.setFont(new Font("Tahoma", Font.PLAIN, 20));
    lblDay.setBounds(863, 11, 57, 25);
    getContentPane().add(lblDay);
    cbxCIFirstName.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            try {
                cbxCILastName.removeAllItems();
                getLastNames();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    });
    cbxCIFirstName.addInputMethodListener(new InputMethodListener() {
        public void caretPositionChanged(InputMethodEvent arg0) {
        }
        public void inputMethodTextChanged(InputMethodEvent arg0) {

        }
    });
    cbxCIFirstName.setEditable(true);


    cbxCIFirstName.setBounds(307, 106, 330, 20);
    getContentPane().add(cbxCIFirstName);
    cbxCILastName.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            try {
                updateCheckInData();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    });


    cbxCILastName.setBounds(307, 163, 330, 20);
    getContentPane().add(cbxCILastName);

    JLabel lblFirstName = new JLabel("First Name");
    lblFirstName.setBounds(307, 93, 73, 14);
    getContentPane().add(lblFirstName);

    JLabel lblLastName = new JLabel("Last Name");
    lblLastName.setBounds(307, 149, 73, 14);
    getContentPane().add(lblLastName);

    JLabel lblStation = new JLabel("Station");
    lblStation.setBounds(647, 93, 73, 14);
    getContentPane().add(lblStation);

    JLabel lblTime = new JLabel("Time");
    lblTime.setBounds(647, 149, 73, 14);
    getContentPane().add(lblTime);


    lblCIStation.setFont(new Font("Tahoma", Font.PLAIN, 15));
    lblCIStation.setBounds(647, 102, 136, 25);
    getContentPane().add(lblCIStation);

    lblCITime.setFont(new Font("Tahoma", Font.PLAIN, 15));
    lblCITime.setBounds(647, 159, 136, 25);
    getContentPane().add(lblCITime);

    JButton btnCheckIn = new JButton("Check In");
    btnCheckIn.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            try {
                checkedIn();
            } catch (Exception e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }
    });
    btnCheckIn.setBounds(759, 117, 110, 55);
    getContentPane().add(btnCheckIn);

    JSeparator separator = new JSeparator();
    separator.setBounds(52, 220, 900, 2);
    getContentPane().add(separator);


    lblWelcome.setFont(new Font("Tahoma", Font.PLAIN, 20));
    lblWelcome.setBounds(85, 254, 161, 25);
    getContentPane().add(lblWelcome);


    lblScanning.setFont(new Font("Tahoma", Font.PLAIN, 20));
    lblScanning.setBounds(85, 290, 161, 25);
    getContentPane().add(lblScanning);


    lblChecking.setFont(new Font("Tahoma", Font.PLAIN, 20));
    lblChecking.setBounds(85, 326, 161, 25);
    getContentPane().add(lblChecking);


    lblRunners.setFont(new Font("Tahoma", Font.PLAIN, 20));
    lblRunners.setBounds(452, 326, 161, 25);
    getContentPane().add(lblRunners);


    lblWrapping.setFont(new Font("Tahoma", Font.PLAIN, 20));
    lblWrapping.setBounds(452, 290, 161, 25);
    getContentPane().add(lblWrapping);

    lblFirstAid.setFont(new Font("Tahoma", Font.PLAIN, 20));
    lblFirstAid.setBounds(452, 254, 161, 25);
    getContentPane().add(lblFirstAid);

    lblVolunteers.setFont(new Font("Tahoma", Font.PLAIN, 20));
    lblVolunteers.setBounds(724, 254, 161, 25);
    getContentPane().add(lblVolunteers);

    JSeparator separator_1 = new JSeparator();
    separator_1.setBounds(52, 383, 900, 2);
    getContentPane().add(separator_1);

    JLabel lblQuickLinks = new JLabel("Quick Links");
    lblQuickLinks.setFont(new Font("Tahoma", Font.PLAIN, 20));
    lblQuickLinks.setBounds(85, 413, 161, 25);
    getContentPane().add(lblQuickLinks);

    JButton btnOster = new JButton("Roster");
    btnOster.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
        }
    });
    btnOster.setBounds(85, 451, 116, 55);
    getContentPane().add(btnOster);

    JButton btnVolunteerInfo = new JButton("Volunteer Info");
    btnVolunteerInfo.setBounds(211, 451, 116, 55);
    getContentPane().add(btnVolunteerInfo);

    JButton btnSearch = new JButton("Search");
    btnSearch.setBounds(337, 451, 116, 55);
    getContentPane().add(btnSearch);

    JButton btnWelcome = new JButton("Welcome");
    btnWelcome.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
        }
    });
    btnWelcome.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent arg0) {
                EventQueue.invokeLater(new Runnable() {
                    public void run() {
                        try {
                            checkStation("Welcome");
                            Welcome openWelcome = new Welcome();
                            openWelcome.setVisible(true);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                });
        }
    });
    btnWelcome.setBounds(85, 526, 116, 55);
    getContentPane().add(btnWelcome);

    JButton btnScanning = new JButton("Scanning");
    btnScanning.setBounds(211, 526, 116, 55);
    getContentPane().add(btnScanning);

    JButton btnChecking = new JButton("Checking");
    btnChecking.setBounds(337, 526, 116, 55);
    getContentPane().add(btnChecking);

    JButton btnFirstAid = new JButton("First Aid");
    btnFirstAid.setBounds(463, 526, 116, 55);
    getContentPane().add(btnFirstAid);

    JButton btnWrapping = new JButton("Wrapping");
    btnWrapping.setBounds(589, 526, 116, 55);
    getContentPane().add(btnWrapping);

    JButton btnRunners = new JButton("Runners");
    btnRunners.setBounds(715, 526, 116, 55);
    getContentPane().add(btnRunners);

    JButton btnVolunteers = new JButton("Volunteers");
    btnVolunteers.setBounds(842, 526, 116, 55);
    getContentPane().add(btnVolunteers);

    JButton btnCheckOut = new JButton("Check Out");
    btnCheckOut.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent arg0) {
            try {
                checkOut();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    });
    btnCheckOut.addKeyListener(new KeyAdapter() {
        @Override
        public void keyPressed(KeyEvent arg0) {
            try {
                checkOut();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    });
    btnCheckOut.setBounds(124, 117, 110, 55);
    getContentPane().add(btnCheckOut);

    getFirstNames();

}

public static void getFirstNames() throws Exception{
    Class.forName("com.mysql.jdbc.Driver");

    Connection con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/crm", "root", "t00rt00r");
    PreparedStatement statement = (PreparedStatement) con.prepareStatement("SELECT `first_name` FROM volunteers");
    ResultSet result = statement.executeQuery();
    cbxCIFirstName.setToolTipText("Select a first name");
    cbxCIFirstName.setEditable(true);
    cbxCIFirstName.addItem("Please select a first name");

    while(result.next()){
        if(firstNames.contains(result.getString(1)) != true){
            firstNames.add(result.getString(1));
        }
    }

    for(int i=0; i<firstNames.size(); i++){
        cbxCIFirstName.addItem(firstNames.get(i));
    }
}

public static void getLastNames() throws Exception{
    Class.forName("com.mysql.jdbc.Driver");

    Connection con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/crm", "root", "t00rt00r");
    PreparedStatement statement = (PreparedStatement) con.prepareStatement("SELECT `last_name` FROM volunteers WHERE `first_name` = '" + cbxCIFirstName.getSelectedItem() + "'");
    ResultSet result = statement.executeQuery();
    cbxCILastName.setToolTipText("Select a last name");
    cbxCILastName.setEditable(true);

    int rowcount = 0;
    if (result.last()) {
      rowcount = result.getRow();
      result.beforeFirst(); // not rs.first() because the rs.next() below will move on, missing the first element
    }
    if(rowcount > 1){
        cbxCILastName.addItem("Please select a last name");
    }
    while(result.next()){
        cbxCILastName.addItem(result.getString(1));
    }
}

public void checkedIn() throws Exception{
    Class.forName("com.mysql.jdbc.Driver");

    Connection con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/crm", "root", "t00rt00r");
    PreparedStatement statement = (PreparedStatement) con.prepareStatement("SELECT `volunteer_id` FROM volunteers WHERE `first_name` = '" + cbxCIFirstName.getSelectedItem() + "' AND `last_name` = '" + cbxCILastName.getSelectedItem() + "'");
    ResultSet result = statement.executeQuery();

    while(result.next()){
        // checks if volunteer id is already in the array, ie: already checked in
        if(pCI.contains(result.getString(1))){
            JOptionPane.showMessageDialog(null, "Sorry, this volunteer is already logged in!");
        } else {
            // add volunteer id to array list
            pCI.add(result.getString(1));
            System.out.println(pCI);
            addToLabel(result.getString(1));
            getStationInfo(result.getString(1));
        }
    }   
}

public void addToLabel(String user_id) throws Exception{
    Class.forName("com.mysql.jdbc.Driver");

    Connection con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/crm", "root", "t00rt00r");
    PreparedStatement statement = (PreparedStatement) con.prepareStatement("SELECT `station` FROM volunteers WHERE `volunteer_id` = '" + user_id + "'");
    ResultSet result = statement.executeQuery();

    while(result.next()){
        String stat = result.getString(1);

        switch (stat) {
        case "welcome":
        case "Welcome":
            cWelcome++;
            lblWelcome.setText("Welcome: " + cWelcome);
            break;
        case "scanning":
        case "Scanning":
            cScanning++;
            lblScanning.setText("Scanning: " + cScanning);
            break;
        case "checking":
        case "Checking":
            cChecking++;
            lblChecking.setText("Checking: " + cChecking);
            break;
        case "runners":
        case "Runners":
            cRunners++;
            lblRunners.setText("Runners: " + cRunners);
            break;
        case "wrapping":
        case "Wrapping":
            cWrapping++;
            lblWrapping.setText("Wrapping: " + cWrapping);
            break;
        case "firstaid":
        case "Firstaid":
        case "firstAid":
        case "FirstAid":
            cFirstAid++;
            lblFirstAid.setText("First Aid: " + cFirstAid);
            break;
        case "volunteers":
        case "Volunteers":
            cVolunteers++;
            lblVolunteers.setText("Volunteers: " + cVolunteers);
            break;
        default:
            break;
        }
    }
}

public void updateCheckInData() throws Exception{
    Class.forName("com.mysql.jdbc.Driver");

    Connection con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/crm", "root", "t00rt00r");
    PreparedStatement statement = (PreparedStatement) con.prepareStatement("SELECT `station`, `time` FROM volunteers WHERE `first_name` = '" + cbxCIFirstName.getSelectedItem() + "' AND `last_name` = '" + cbxCILastName.getSelectedItem() + "'");
    ResultSet result = statement.executeQuery();

    while(result.next()){
        lblCIStation.setText(result.getString(1));
        String station = lblCIStation.getText();
        station = station.substring(0, 1).toUpperCase() + station.substring(1);
        lblCIStation.setText(station);
        lblCITime.setText(result.getString(2));
    }
}

public void checkOut() throws Exception{
    Class.forName("com.mysql.jdbc.Driver");

    Connection con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/crm", "root", "t00rt00r");
    PreparedStatement statement = (PreparedStatement) con.prepareStatement("SELECT `volunteer_id` FROM volunteers WHERE `first_name` = '" + cbxCIFirstName.getSelectedItem() + "' AND `last_name` = '" + cbxCILastName.getSelectedItem() + "'");
    ResultSet result = statement.executeQuery();

    while(result.next()){
        pCI.remove(result.getString(1));
        System.out.println(pCI);
        removeFromLabel(result.getString(1));
    }
}

public void removeFromLabel(String user_id) throws Exception{
    Class.forName("com.mysql.jdbc.Driver");

    Connection con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/crm", "root", "t00rt00r");
    PreparedStatement statement = (PreparedStatement) con.prepareStatement("SELECT `station` FROM volunteers WHERE `volunteer_id` = '" + user_id + "'");
    ResultSet result = statement.executeQuery();

    while(result.next()){
        String stat = result.getString(1);

        switch (stat) {
        case "welcome":
        case "Welcome":
            cWelcome--;
            lblWelcome.setText("Welcome: " + cWelcome);
            break;
        case "scanning":
        case "Scanning":
            cScanning--;
            lblScanning.setText("Scanning: " + cScanning);
            break;
        case "checking":
        case "Checking":
            cChecking--;
            lblChecking.setText("Checking: " + cChecking);
            break;
        case "runners":
        case "Runners":
            cRunners--;
            lblRunners.setText("Runners: " + cRunners);
            break;
        case "wrapping":
        case "Wrapping":
            cWrapping--;
            lblWrapping.setText("Wrapping: " + cWrapping);
            break;
        case "firstaid":
        case "Firstaid":
        case "firstAid":
        case "FirstAid":
            cFirstAid--;
            lblFirstAid.setText("First Aid: " + cFirstAid);
            break;
        case "volunteers":
        case "Volunteers":
            cVolunteers--;
            lblVolunteers.setText("Volunteers: " + cVolunteers);
            break;
        default:
            break;
        }
    }
}

public void checkStation(String station) throws Exception{
    Class.forName("com.mysql.jdbc.Driver");

    Connection con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/crm", "root", "t00rt00r");
    PreparedStatement statement = (PreparedStatement) con.prepareStatement("SELECT `volunteer_id` FROM volunteers WHERE `station` = '" + station + "'");
    ResultSet result = statement.executeQuery();

    while(result.next()){
        switch (station) {
        case "Welcome":
        case "welcome":

            break;
        case "Scanning":
        case "scanning":

            break;
        case "Checking":
        case "checking":

            break;
        case "Runners":
        case "runners":

            break;
        case "Wrapping":
        case "wrapping":

            break;
        case "FirstAid":
        case "Firstaid":
        case "firstAid":
        case "firstaid":

            break;
        case "Volunteers":
        case "volunteers":

            break;

        default:
            break;
        }
    }
}

public void getStationInfo(String id) throws Exception{
    Class.forName("com.mysql.jdbc.Driver");

    Connection con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/crm", "root", "t00rt00r");
    PreparedStatement statement = (PreparedStatement) con.prepareStatement("SELECT `first_name`, `last_name`, `time`, `station` FROM volunteers WHERE `volunteer_id` = '" + id + "'");
    ResultSet result = statement.executeQuery();

    String vid = id;
    List vidd = new ArrayList<>(Arrays.asList(vid));

    while(result.next()){
        switch (result.getString(4)) {
        case "Welcome":
        case "welcome":
            inWelcomeStation = (ArrayList<String>) vidd;
            break;
        case "Scanning":
        case "scanning":
            inScanningStation = (ArrayList<String>) vidd;
            break;
        case "Checking":
        case "checking":
            inCheckingStation = (ArrayList<String>) vidd;
            break;
        case "Runners":
        case "runners":
            inRunnersStation = (ArrayList<String>) vidd;
            break;
        case "Wrapping":
        case "wrapping":
            inWrappingStation = (ArrayList<String>) vidd;
            break;
        case "FirstAid":
        case "Firstaid":
        case "firstAid":
        case "firstaid":
            inFirstAidStation = (ArrayList<String>) vidd;
            break;
        case "Volunteers":
        case "volunteers":
            inVolunteersStation = (ArrayList<String>) vidd;
            break;

        default:
            break;
        }
    }
}
}

and the Welcome class:

package co.za.gecko.inked.crm;

import java.awt.BorderLayout;

public class Welcome extends JFrame {

static Object[][] databaseInfo;
static Object[] columns = {"first name", "last name", "cellphone", "time", "station"};
static ResultSet rows;
static ResultSetMetaData metaData;
static DefaultTableModel dTableModel = new DefaultTableModel(databaseInfo, columns)    {
//      public Class getColumnClass(int column){
//          Class returnValue;
//          if((column >= 0) && (column < getColumnCount())){
//              returnValue = getValueAt(0, column).getClass();
//          } else {
//              returnValue = Object.class;
//          }
//          return returnValue;
//      }
};

public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.setBounds(0, 0, 1024, 768);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
    Connection conn = null;
    try {
        Class.forName("com.mysql.jdbc.Driver");
        conn = DriverManager.getConnection("jdbc:mysql://localhost/crm", "root", "t00rt00r");
        Statement sqlState = conn.createStatement();
        String selectStuff = "SELECT `first_name`, `last_name`, `cellphone`, `time` FROM volunteers";
        rows = sqlState.executeQuery(selectStuff);

        Object[] tempRow;

        while(rows.next()){
            tempRow = new Object[]{rows.getString(1), rows.getString(2), rows.getString(3), rows.getString(4)};
            dTableModel.addRow(tempRow);
        }

        // get column name ?
//          metaData = rows.getMetaData();
//          int numOfCol = metaData.getColumnCount();
//          
//          columns = new String[numOfCol];
//          
//          for(int i=1; i<= numOfCol; i++){
//              columns[i] = metaData.getColumnName(i);
//          }

    } catch (ClassNotFoundException ex) {
        // TODO Auto-generated catch block
        System.out.println(ex.getMessage());
    } catch (SQLException ex) {
        // TODO Auto-generated catch block
        System.out.println(ex.getMessage());
    }

    JTable table = new JTable(dTableModel);

    table.setRowHeight(table.getRowHeight() + 10); // change row height
    table.setFont(new Font("Serif", Font.PLAIN, 20)); // change font
    table.setAutoCreateRowSorter(true); // sort table
    table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); // change column resize
    TableColumn col1 = table.getColumnModel().getColumn(0); // change column width
    col1.setPreferredWidth(100);

    TableColumn tc = table.getColumn("cellphone");
    CenterTableCellRenderer centerRenderer = new CenterTableCellRenderer();
    tc.setCellRenderer(centerRenderer);

    JScrollPane scrollPane = new JScrollPane(table);
    frame.add(scrollPane, BorderLayout.CENTER);
    frame.setSize(800, 500);
    frame.setVisible(true);
}
}

回答1:


(so I click on the quick link in the CheckIn class,

You should be using an ActionListener (not a MouseListener) to listen for a click on a button.

The basic structure for your code should be:

JFrame frame = new JFrame();
...
frame.add(scrollPane...);
frame.pack() //or frame.setSize(...)
frame.pack()
frame.setVisible(true);

That is you should only display the frame AFTER you have added all the component to the frame. Right now your code makes the frame visible before you add any components.

Also, you should not be using static variables. Those variables should be instance variables in your welcome class.

The above comments are general in nature and not the cause of your real problem.

The problem is that your Welcome class doesn't have a constructor.

When you execute the Welcome class through the JVM then the main() method is invoked which is where you create the frame and all the components.

When you invoke the Welcome class through your other program the empty constructor for your Welcome class is executed. This code does nothing. Since your class extends JFrame all you see is an empty frame.

So to solve your problem you basically need to move all the code related to build a frame into the constructor of your Welcome class.



来源:https://stackoverflow.com/questions/18829788/jframe-not-opening-correctly-or-showing-contents

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!