What is the problem here, LayoutManagers.

I

iMohed

Hello guys. I have a Problem in the following code. The result is that
only one MFrame shows up in the window instead of the two constructed.
What is wrong and why ?? Thanks in advance for any aid.

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package sspclient;

import javax.swing.*;
import java.awt.event.*;

/**
*
* @author mohed
*/
public class View extends JFrame implements ActionListener{

private final String[] type = {"Sten","Sax","Påse"};

MFrame[] frames = new MFrame[2];

public class MFrame extends JPanel{

JLabel name = new JLabel("Name");
JTextField msg = new JTextField("msg");
JPanel buttons = new JPanel();
JButton[] sSP = new JButton[3];
JLabel status = new JLabel("Status");
JTextField score = new JTextField("Score");
}

public View(){

for (MFrame mF : this.frames) {

mF = new MFrame();
mF.setLayout(new BoxLayout(mF, BoxLayout.PAGE_AXIS));
mF.add(mF.name);
mF.add(mF.msg);
mF.buttons.setLayout(new BoxLayout(mF.buttons,
BoxLayout.LINE_AXIS));
for (JButton jB : mF.sSP) {
jB = new JButton();
mF.buttons.add(jB);
}
mF.add(mF.buttons);
mF.add(mF.status);
mF.add(mF.score);
this.add(mF);
}

this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setVisible(true);
}

public void actionPerformed(ActionEvent e) {

}

public static void main( String[] args ){

View v = new View();
}
}

Mohamed Haidar
 
K

Knute Johnson

Hello guys. I have a Problem in the following code. The result is that
only one MFrame shows up in the window instead of the two constructed.
What is wrong and why ?? Thanks in advance for any aid.

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package sspclient;

import javax.swing.*;
import java.awt.event.*;

/**
*
* @author mohed
*/
public class View extends JFrame implements ActionListener{

private final String[] type = {"Sten","Sax","Påse"};

MFrame[] frames = new MFrame[2];

public class MFrame extends JPanel{

JLabel name = new JLabel("Name");
JTextField msg = new JTextField("msg");
JPanel buttons = new JPanel();
JButton[] sSP = new JButton[3];
JLabel status = new JLabel("Status");
JTextField score = new JTextField("Score");
}

public View(){

for (MFrame mF : this.frames) {

mF = new MFrame();
mF.setLayout(new BoxLayout(mF, BoxLayout.PAGE_AXIS));
mF.add(mF.name);
mF.add(mF.msg);
mF.buttons.setLayout(new BoxLayout(mF.buttons,
BoxLayout.LINE_AXIS));
for (JButton jB : mF.sSP) {
jB = new JButton();
mF.buttons.add(jB);
}
mF.add(mF.buttons);
mF.add(mF.status);
mF.add(mF.score);
this.add(mF);
}

this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setVisible(true);
}

public void actionPerformed(ActionEvent e) {

}

public static void main( String[] args ){

View v = new View();
}
}

Mohamed Haidar

By default a JFrame has BorderLayout as its layout manager. The add()
method without an argument adds the component to the
BorderLayout.CENTER. So one is hidden by the other. Also you need to
size your JFrame with either pack() or setSize(). In addition, the
creation of Swing components needs to be done on the event dispatch thread.

import javax.swing.*;
import java.awt.*; // needed for the FlowLayout
import java.awt.event.*;

/**
*
* @author mohed
*/
public class View extends JFrame implements ActionListener{

private final String[] type = {"Sten","Sax","Påse"};

MFrame[] frames = new MFrame[2];

public class MFrame extends JPanel{

JLabel name = new JLabel("Name");
JTextField msg = new JTextField("msg");
JPanel buttons = new JPanel();
JButton[] sSP = new JButton[3];
JLabel status = new JLabel("Status");
JTextField score = new JTextField("Score");
}

public View(){
// View needs a different layout mgr
setLayout(new FlowLayout());

for (MFrame mF : this.frames) {

mF = new MFrame();
mF.setLayout(new BoxLayout(mF, BoxLayout.PAGE_AXIS));
mF.add(mF.name);
mF.add(mF.msg);
mF.buttons.setLayout(new BoxLayout(mF.buttons,
BoxLayout.LINE_AXIS));
for (JButton jB : mF.sSP) {
jB = new JButton();
mF.buttons.add(jB);
}
mF.add(mF.buttons);
mF.add(mF.status);
mF.add(mF.score);
this.add(mF);
}

this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.pack(); // View needs to be sized
this.setVisible(true);
}

public void actionPerformed(ActionEvent e) {

}

public static void main( String[] args ){
// you should wrap this in EventQueue.invokLater()
View v = new View();
}
}
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top