I am trying to allow my program to add more rows of content that will eventually allow them to input point values (x & y). However, I cannot seem to get my JPanel to actually add anything when the add button is pressed.
Here is the class (JPanel extension) that I am trying to add to my overall JPanel:
class Coordinates extends JPanel
{
public String x;
public String y;
public int id;
public Coordinates(int spot)
{
super();
x = "0";
y = "0";
id = spot;
setLayout(null);
setSize(440,30);
setLocation(10,5);
JLabel num = new JLabel("Point #" + (id + 1) + ":");
num.setLocation(0,0);
num.setSize(40,20);
add(num);
}
}
And here is the AbstractAction extension for the add button that should add it when pressed:
class AddACT extends AbstractAction
{
public void actionPerformed(ActionEvent e)
{
pointList.add(new Point());
gui.add(new Coordinates(1));
}
}
And, if anyones up for a massive block of code, here’s the entire window’s code:
import java.util.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class PointWindow
{
private ArrayList<Point> pointList = new ArrayList<Point>();
public PointWindow()
{
initialize();
}
public void initialize()
{
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame("Set New Points");
frame.setContentPane(createGUI());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(440,600);
frame.setLocationRelativeTo(null);
frame.setResizable(false);
frame.setVisible(true);
}
public JPanel createGUI()
{
final JPanel gui = new JPanel();
gui.setLayout(null);
Font boldTitle = new Font("Arial", Font.BOLD, 30);
class Line extends JPanel
{
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawLine(0,0,430,0);
}
}
class Coordinates extends JPanel
{
public String x;
public String y;
public int id;
public Coordinates(int spot)
{
super();
x = "0";
y = "0";
id = spot;
setLayout(null);
setSize(440,30);
setLocation(10,5);
JLabel num = new JLabel("Point #" + (id + 1) + ":");
num.setLocation(0,0);
num.setSize(40,20);
add(num);
}
}
final JButton add = new JButton("Add");
final JButton remove = new JButton("Remove");
final JButton makeGraph = new JButton("Generate Graph!");
final JLabel numPointsL = new JLabel("0");
class AddACT extends AbstractAction
{
public void actionPerformed(ActionEvent e)
{
pointList.add(new Point());
gui.add(new Coordinates(1));
}
}
class RemoveACT extends AbstractAction
{
public void actionPerformed(ActionEvent e)
{
}
}
class MakeGraphACT extends AbstractAction
{
public void actionPerformed(ActionEvent e)
{
}
}
JPanel line1 = new JPanel();
line1.setLayout(null);
line1.setLocation(5,5);
line1.setSize(440,35);
gui.add(line1);
JLabel text1 = new JLabel("Point Manager");
text1.setFont(boldTitle);
text1.setLocation(0,0);
text1.setSize(300,35);
line1.add(text1);
add.setLocation(220,0);
add.setSize(100,33);
add.addActionListener(new AddACT());
line1.add(add);
remove.setLocation(330,0);
remove.setSize(100,33);
add.addActionListener(new RemoveACT());
line1.add(remove);
JPanel line2 = new JPanel();
line2.setLayout(null);
line2.setLocation(5,45);
line2.setSize(440,30);
gui.add(line2);
JLabel text2 = new JLabel("Current number of points:");
text2.setLocation(2,1);
text2.setSize(165,20);
line2.add(text2);
numPointsL.setLocation(172,1);
numPointsL.setSize(40,20);
line2.add(numPointsL);
makeGraph.setLocation(222,0);
makeGraph.setSize(206,22);
makeGraph.addActionListener(new MakeGraphACT());
line2.add(makeGraph);
Line l1 = new Line();
l1.setLocation(5,29);
l1.setSize(420,1);
line2.add(l1);
return gui;
}
}
They are begin added, but it’s begin added behind the other components.
Instead of using
setLocation(10,5)trysetLocation(5, 75), which will place it underneath the line.Also, call
gui.repaint()after theaddcall to request that the ui be repaintedMore importantly, use layout managers.