Updated - this is related with the following link I posted yesterday.
https://stackoverflow.com/questions/15916360/swing-gui-application-in-java-with-multiple-frames
I apologize if I am doing something wrong here, I tried to write in my previous post and I couldn't find a way to do it beyond the comments box.
I did some changes on my code, now I am working with 3 JPanels. I created a class for each panel except the main one that will hold in a CardLayout the other two. The main panel is created in my main class and application at the same time.
Now I am trying to paint a happy face in one of the two panels when I press a button but it doesn't work.
import statements;
public class JDataAnalyzerGui extends JFrame {
private static final String INTRO = "welcome";
private static final String OPERATIONS = "operations";
private CardLayout cardlayout = new CardLayout();
private JPanel mainPanel = new JPanel(cardlayout);
private WelcomePanel welcomePanel = new WelcomePanel();
private OperationPanel operationPanel = new OperationPanel();
private ReadFiles aFileReader;
public JDataAnalyzerGui() {
// adding panels to the main panel
mainPanel.add(welcomePanel.getMainComponent(), INTRO);
mainPanel.add(operationPanel.getMainComponent(), OPERATIONS);
welcomePanel.addAcceptActionListener(new ActionListener() { //moves to next view where the buttons are and were the drawing should happen
@Override
public void actionPerformed(ActionEvent e) {
int input = Integer.parseInt(welcomePanel.userInput.getText());
boolean isValid = isOptionValid(input);
if(isValid) {
cardlayout.show(mainPanel, OPERATIONS);
performActions(aFileReader);
}
}
});
operationPanel.addReturnActionListener(new ActionListener() { //returns to welcome window
@Override
public void actionPerformed(ActionEvent e) {
Graphics pen = getGraphics();
Object source = e.getSource();
if(source == operationPanel.aButton8) {
operationPanel.results.setText(null);
welcomePanel.userInput.setText(null);
cardlayout.show(mainPanel, INTRO);
}
// when button1 is pressed I want to draw a String on panel2 from operationPanel.
else if(source == operationPanel.aButton1) {
operationPanel.results.setText("The maximun opening value was " + Calculations.hiOpenValue);
operationPanel.panel2.setBackground(Color.GREEN);
pen.setFont(new Font("Broadway", Font.ITALIC, 12));
pen.setColor(Color.MAGENTA);
pen.drawString("this is a test", 20, 40);
}
// code for the rest of buttons
}
});
}
private boolean isOptionValid(int option) {
switch(option) {
case 1:
aFileReader = new ReadFiles("newMSFT.csv");
return true;
case 4:
Object[] options = { "YES", "CANCEL" };
int reply = JOptionPane.showOptionDialog(null, "Are you sure you want to go?", "Confirm Exit", JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[0]);
if(reply == JOptionPane.YES_OPTION)
System.exit(0);
return false;
default:
JOptionPane.showMessageDialog(null, "That is an invalid option. Please try again");
return false;
}
}
public void performActions(ReadFiles obj) {
// code for numeric calculations
}
private JComponent getMainComponent() {
return mainPanel;
}
private static void createAndShowUI() {
JFrame frame = new JFrame("Data Analyzer");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new JDataAnalyzerGui().getMainComponent());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
createAndShowUI();
}
});
}
}
------------------------------ Operation Jpanel
import statements;
class OperationPanel {
JPanel mainPanel = new JPanel();
JPanel panel1 = new JPanel(new FlowLayout());
JPanel panel2 = new JPanel(new FlowLayout());
JPanel panel3 = new JPanel(new FlowLayout());
JLabel results = new JLabel ("");
JButton aButton1 = new JButton("Max Open");; // 8 buttons in total, this is the one for painting
JButton aButton8 = new JButton("Return to Main");
public OperationPanel() {
mainPanel.setLayout(new GridLayout(3, 1));
mainPanel.add(panel1);
mainPanel.add(panel3);
panel2.setBackground(Color.WHITE);
mainPanel.add(panel2);
panel1.add(aButton1);
// adding all buttons to panel1
panel2.add(results);
}
public JComponent getMainComponent() {
return mainPanel;
}
public void addReturnActionListener(ActionListener listener) { // el que retorna a welcome view
aButton8.addActionListener(listener);
aButton1.addActionListener(listener);
//addActionListener for all buttons
}
}
-------------------- Welcome panel
class WelcomePanel {
private JPanel mainPanel = new JPanel();
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel(new GridLayout(5,1));
JPanel panel3 = new JPanel(new FlowLayout());
JLabel greetings = new JLabel("Welcome to Data Analizer");
Font bigFont = new Font("Comic Sans", Font.BOLD, 30);
JLabel label1 = new JLabel("Please select one of these options:");
JLabel label2 = new JLabel("1. newMSFT.csv");
JLabel label3 = new JLabel("2. XXX.csv");
JLabel label4 = new JLabel("3. YYY.csv");
JLabel label5 = new JLabel("4. QUIT");
Font bigFont2 = new Font("Arial", Font.BOLD, 20);
JTextField userInput = new JTextField(10);
JButton aButton = new JButton("Accept");
public WelcomePanel() {
mainPanel.setLayout(new GridLayout(3, 1));
greetings.setFont(bigFont);
label1.setFont(bigFont2);
label2.setFont(bigFont2);
label3.setFont(bigFont2);
label4.setFont(bigFont2);
label5.setFont(bigFont2);
mainPanel.add(panel1);
mainPanel.add(panel2);
mainPanel.add(panel3);
panel1.add(greetings);
panel2.add(label1);
panel2.add(label2);
panel2.add(label3);
panel2.add(label4);
panel2.add(label5);
panel3.add(userInput);
panel3.add(aButton);
}
public void addAcceptActionListener(ActionListener listener) { // este es el que llama a segunda ventana o view
aButton.addActionListener(listener);
userInput.addActionListener(listener);
}
public JComponent getMainComponent() {
return mainPanel;
}
}
I can't figure out how to draw in an specific panel.
Thanks
See Question&Answers more detail:
os