Ouvrir de nouveaux JFrame avec JButton Cliquez - Java Swing

Je suis en train d'ouvrir une nouvelle fenêtre JFrame avec un clic sur un bouton de l'événement. Il y a beaucoup d'info sur ce site, mais rien qui m'aide parce que je pense que ce n'est pas tant le code que j'ai, mais la commande est exécutée (et pourtant je suis incertain).

C'est le code pour l'image en maintenant le bouton que je veux lancer l'événement:

package messing with swing;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import javax.swing.border.EmptyBorder;
public class ReportGUI extends JFrame{
//Fields
private JButton viewAllReports = new JButton("View All Program Details");
private JButton viewPrograms = new JButton("View Programs and Majors Associated with this course"); 
private JButton viewTaughtCourses = new JButton("View Courses this Examiner Teaches"); 
private JLabel courseLabel = new JLabel("Select a Course: ");
private JLabel examinerLabel = new JLabel("Select an Examiner: "); 
private JPanel panel = new JPanel(new GridLayout(6,2,4,4));  
private ArrayList<String> list = new ArrayList<String>(); 
private ArrayList<String> courseList = new ArrayList<String>();  
public ReportGUI(){   
reportInterface();
allReportsBtn();     
examinnerFileRead();
courseFileRead();
comboBoxes();
}        
private void examinnerFileRead(){
try{
Scanner scan = new Scanner(new File("Examiner.txt"));
while(scan.hasNextLine()){
list.add(scan.nextLine());
}
scan.close();
}
catch (FileNotFoundException e){
e.printStackTrace();
}
}
private void courseFileRead(){
try{
Scanner scan = new Scanner(new File("Course.txt"));
while(scan.hasNextLine()){
courseList.add(scan.nextLine());
}
scan.close();
}
catch (FileNotFoundException e){
e.printStackTrace();
}
}
private void reportInterface(){         
setTitle("Choose Report Specifications");                   
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JPanel panel = new JPanel(new FlowLayout());        
add(panel, BorderLayout.CENTER);
setSize(650,200);
setVisible(true);    
setResizable(false);
setLocationRelativeTo(null);
}    
private void allReportsBtn(){
JPanel panel = new JPanel(new GridLayout(1,1)); 
panel.setBorder(new EmptyBorder(70, 50, 70, 25));
panel.add(viewAllReports);        
viewAllReports.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
JFrame AllDataGUI = new JFrame();
new AllDataGUI();
}
});         
add(panel, BorderLayout.LINE_END);
}       
private void comboBoxes(){                
panel.setBorder(new EmptyBorder(0, 5, 5, 10));
String[] comboBox1Array = list.toArray(new String[list.size()]);
JComboBox comboBox1 = new JComboBox(comboBox1Array);          
panel.add(examinerLabel);
panel.add(comboBox1);          
panel.add(viewTaughtCourses);
viewTaughtCourses.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {                 
JFrame ViewCourseGUI = new JFrame();
new ViewCourseGUI();
}
});  
String[] comboBox2Array = courseList.toArray(new String[courseList.size()]);
JComboBox comboBox2 = new JComboBox(comboBox2Array);
panel.add(courseLabel);         
panel.add(comboBox2); 
panel.add(viewPrograms);
add(panel, BorderLayout.LINE_START); 
} 

Si vous ne voulez pas de se plonger dans le code ci-dessus, le bouton ActionListener est ici:

 panel.add(viewTaughtCourses);
viewTaughtCourses.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {                 
JFrame ViewCourseGUI = new JFrame();
new ViewCourseGUI();
}
});  

C'est le code de la classe la tenue de la JFrame je veux ouvrir:

package messing with swing;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.border.EmptyBorder;
public class ViewCourseGUI extends JFrame{ 
private JButton saveCloseBtn = new JButton("Save Changes and Close");
private JButton closeButton = new JButton("Exit Without Saving");
private JFrame frame=new JFrame("Courses taught by this examiner");
private JTextArea textArea = new JTextArea();
public void ViewCoursesGUI(){
panels();
}        
private void panels(){        
JPanel panel = new JPanel(new GridLayout(1,1));
panel.setBorder(new EmptyBorder(5, 5, 5, 5));
JPanel rightPanel = new JPanel(new GridLayout(15,0,10,10));
rightPanel.setBorder(new EmptyBorder(15, 5, 5, 10));
JScrollPane scrollBarForTextArea=new JScrollPane(textArea,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
panel.add(scrollBarForTextArea); 
frame.add(panel);
frame.getContentPane().add(rightPanel,BorderLayout.EAST);
rightPanel.add(saveCloseBtn);
rightPanel.add(closeButton);
frame.setSize(1000, 700);
frame.setVisible(true);   
frame.setLocationRelativeTo(null);
}
}

Quelqu'un pourrait-il svp me pointer dans la bonne direction?

  • Je ne sais pas pourquoi vous êtes réglage de la viewCourseGUI être égale à une nouvelle JFrame. Ce faire: JFrame ViewCourseGUI = new ViewCourseGUI();
  • Je vais lui donner un aller. Je ne suis pas sûr que ce soit encore l'apprentissage de ces petites nuances.
  • public void ViewCoursesGUI() est pas un constructeur et ne sera pas appelé lors de l'utilisation de new mot-clé. Supprimer void. Les constructeurs ne peuvent pas avoir de tous a déclaré le type de retour, même void.
  • Combinez cela avec le fait que je l'ai appelé ViewCoursesGUI() au lieu de ViewCourseGUI()... Et maintenant ça fonctionne. Merci beaucoup.
  • Voir L'Utilisation de Plusieurs JFrames, Bonne/Mauvaise Pratique?
InformationsquelleAutor Splunk | 2014-06-06