我正在设计一个JApplet,基本上这个applet将允许用户绘制二次方程图,并插入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);
}
}
答案 0 :(得分:4)
让x轴和y轴控制在一起,你应该有两个面板,一个包括x轴的标签和文本字段,一个用于y轴在另一个。然后,您可以将它们添加到垂直对齐的面板。 (例如Box.createVerticalBox()
)
您可以将graph.java
ActionListener
设为'Plot'和'Refine'按钮。在graph.java的actionPerformed
方法中,您可以启动重绘,从'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实例中收集范围......'
您应该查看this tutorial中的ActionListener
以了解如何在单独的班级中按下按钮点击事件触发操作。
另外,有两个批评:
GraphApplet
中,在将Box
传递给每个ControlsA
和ControlsB
的构造函数之前,您正在创建GraphApplet
。在构造函数中,然后重新分配您传入的Box。我认为您不需要这样做。在ControlsA
中创建正确对齐的框,将其传入,不要重新分配,或者根本不传递任何内容。
您的ControlsB
和JPanel
课程均延长Box
。虽然您在构造函数的末尾添加JPanel
容器时遇到了麻烦,但是您永远不会将这些控件+对象添加到任何父容器中。在您当前的实施中,我建议不要延长{{1}}。
答案 1 :(得分:4)
建议: