2

我正在设计一个 JApplet,基本上这个小程序将允许用户绘制一个二次方程图,并插入 x 轴和 y 轴的范围。但要达到这一点还有很多工作要做。

我还在设计界面的阶段。

这是我的代码:

import java.awt.Dimension;

import javax.swing.BoxLayout;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;


public class Applet extends JApplet {
    JPanel p1;
    JPanel p2;
    JPanel p3;

    JScrollPane s1;

    public Applet() {

    p1 = new JPanel();
    p2 = new JPanel();
    p3 = new JPanel();

    s1 = new JScrollPane(p3,s1.VERTICAL_SCROLLBAR_ALWAYS,s1.HORIZONTAL_SCROLLBAR_ALWAYS);
    }

    @Override
    public void init() {
    super.init();

    for(int i=0;i<100;i++)
    {
        p3.add(new JButton("Hello"));
        p3.add(new JLabel("blah"));
        p3.add(new JButton("Sup"));
    }

    p1.setPreferredSize(new Dimension(this.getWidth(), this.getHeight()));
    p2.setPreferredSize(new Dimension(this.getWidth(),(int) (this.getHeight()*0.6667)));

    p3.setLayout(new BoxLayout(p3,BoxLayout.PAGE_AXIS));
    s1.setPreferredSize(new Dimension(this.getWidth(),(int)(this.getHeight()*0.33333)));

    p1.add(p2);
    p1.add(s1);

    this.add(p1);
    }

}
4

2 回答 2

4

建议:

于 2012-06-16T15:07:24.620 回答
4
  1. 要将 x 轴和 y 轴控件放在一起,您应该有两个面板,一个包含 x 轴的标签和文本字段,另一个包含 y 轴的标签和文本字段。然后,您可以将它们添加到垂直对齐的面板中。(Box.createVerticalBox()例如)

  2. 您可以graph.java使用ActionListener“绘图”和“优化”按钮。在actionPerformedgraph.java 的方法中,您可以启动重绘,从“ControlsB”实例中收集范围。

编辑:回复您的评论...

'如何添加另一个面板以便我将 x 轴放在 y 轴上方'

这可以像(在 ControlsB.java 中)一样简单:

b = Box.createHorizontalBox();
b.add(new JLabel("Please enter range:  "));

Box b0 = Box.createVerticalBox();//create a vertical box to stack the controls

Box b1 = Box.createHorizontalBox(); // create a horizontal box for the x-axis

b1.add(new JLabel(" x-axis "));
b1.add(new JLabel("from"));
JTextField f1 = new JTextField("-5");
f1.setMaximumSize(new Dimension(100,30));
b1.add(f1);
b1.add(new JLabel(" to "));
JTextField f2 = new JTextField("5");
f2.setMaximumSize(new Dimension(100,30));
b1.add(f2);
b1.add(new JLabel(".   "));

Box b2 = Box.createHorizontalBox(); // create a second horizontal box for the y-axis
b2.add(new JLabel("y-axis "));
b2.add(new JLabel("from"));
JTextField f3 = new JTextField("5");
f3.setMaximumSize(new Dimension(100,30));
b2.add(f3);
b2.add(new JLabel("to"));
JTextField f4 = new JTextField("-5");
f4.setMaximumSize(new Dimension(100,30));
b2.add(f4);

b0.add(b1); // add the x-axis to the vertical box
b0.add(b2); // add the y-axis to the vertical box
b.add(b0);  // add the vertical box to the parent

b.add(new JButton("Plot"));
b.add(new JButton("Refine"));
add(b); //is this necessary?
}

'以及如何从 ControlsB 实例中收集范围......'

您应该查看本教程ActionListener中的 s以了解如何使按钮单击事件在单独的类中触发动作。

另外,两个批评:

  1. 在您的主类中GraphApplet,您正在创建 a Box,然后将其传递给每个ControlsAandControlsB的构造函数。然后,在构造函数中,您重新分配您传入的 Box。我认为您不需要这样做。在 中创建正确对齐的框GraphApplet,将其传入并且不重新分配,或者根本不传入任何内容。

  2. ControlsAControlsB类都扩展了JPanel. 尽管Box在它们的构造函数末尾将容器添加到每个容器中都会遇到麻烦,但您永远不会将这些 Controls+ 对象添加到任何父容器中。在您当前的实施中,我建议JPanel不需要扩展。

于 2012-06-16T14:58:21.803 回答