1

プログラムでコンテンツの行を追加して、最終的にポイント値(x&y)を入力できるようにしようとしています。ただし、追加ボタンを押しても、JPanelに実際に何かを追加させることができないようです。

これが、JPanel全体に追加しようとしているクラス(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);
  }
}

そして、これが追加ボタンのAbstractAction拡張機能で、押されたときに追加する必要があります。

class AddACT extends AbstractAction
{
  public void actionPerformed(ActionEvent e)
  {
    pointList.add(new Point());
    gui.add(new Coordinates(1));
  }
}

そして、誰かがコードの大規模なブロックを求めているなら、ここにウィンドウ全体のコードがあります:

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;
  }
}
4

1 に答える 1

3

それらは追加され始めますが、他のコンポーネントの後ろに追加され始めます。

setLocation(10,5)tryを使用する代わりにsetLocation(5, 75)、線の下に配置します。

また、呼び出しgui.repaint()後にadd呼び出して、UIの再描画を要求します

さらに重要なのは、レイアウトマネージャーを使用することです。

于 2012-11-19T03:03:00.497 に答える