FNAKLNFDKA.java
import java.awt.*;
import javax.swing.*;
public class GraphApplet extends JApplet{
private static final long serialVersionUID = 1L;
public static Graphics p;
public void init(){
SwingUtilities.invokeLater(new Runnable() {
public void run() {
});
}
}
FANKJ.java
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
class FASKHF extends JPanel {
public static Graphics p;
private static final long serialVersionUID = 1L;
public Graph(){
this.setBackground(Color.yellow);
}
@Override
public Dimension getPreferredSize()
{
return (new Dimension(560,560));
}
public static void updateGraph() {
repaint();
}
public void paint(Graphics F) {
//line co-ordinates
//the numbers represent the number of boxes on the graph
//1st line on the l/h side
int xstart1 = 2;
int ystart1 = 3;
int xfinish1 = 1;
int yfinish1 = 9;
//2nd line on the r/h side
int xstart2 = 8;
int ystart2 = 3;
int xfinish2 = 9;
int yfinish2 = 9;
//drawing upper arc
int arcX = 2;
int arcY = 1;
int imagRectWid = 6;
int imagRectHei = 4;
int startAngle = 0;
int arcAngle = 180;
//other
f = xaxis22;
g = xaxis11;
//to be assigned later.
//the values of xaxis and yaxis need to be separated
//yaxis3 = 5;
//yaxis4 = -5;
//change -ve num to +ve
int g3 = Math.abs(g);
int a1 = g3 + f;
int b1 = a1;
int d = (appletWidth / a1);
int e = (Height / b1);
/**
to determine the
ammount of pixles there
is in each box of the
graph, both y-axis and
x-axis
*/
int xbox = x1 / 10;
int ybox = y1 / 10;
//line variables
//the xstart, ystart, etc represent the number of boxes
//top point of the line on the graph
px1 = xbox * xstart1;//start x
py1 = ybox * ystart1;//start y
//lowwer point of the line on the graph
px = xbox * xfinish1;//finish x
py = ybox * yfinish1;//finish y
//other line on the right hand side
p2x = xbox * xstart2;
p2y = ybox * ystart2;
p2x2 = xbox * xfinish2;
p2y2 = ybox * yfinish2;
//drawing arc
int arcBoxX = arcX * xbox;
int arcBoxY = arcY * ybox;
int arcBoxWidth = imagRectWid * xbox;
int arcBoxHeight = imagRectHei * ybox;
//draw y-axis numbers
//(+ve)
while(f != 0){
String s = String.valueOf(f);
p.drawString(s,(x + 5),m + 13);
m = m + b;
f = f - 1;
}
//(-ve)
m2 = y;
while(f2 != g-1){
String u = String.valueOf(f2);
p.drawString(u,(x + 5),m2 - 3);
m2 = m2 + b;
f2 = f2 - 1;
}
//draw x-axis numbers.
//(-ve)
while(g != 0){
String t = String.valueOf(g);
p.drawString(t,n,y - 5);
n = n + a;
g = g + 1;
}
//(+ve)
n2 = x + a;
while(g2 != g3+1){
String vw = String.valueOf(g2);
p.drawString(vw,n2 -10,y - 5);
n2 = n2 + a;
g2 = g2 + 1;
}
BasicStroke aLine2 = new BasicStroke(1.0F,
BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND);
graph.setStroke(aLine2);
//notch on numbers and grid lines
//left to right, top to bottom notches
int v2 = -5;
int v5 = 0;
while(i <= a1-1){
p.drawLine(Da,0,Ea,y1);
a = a + d;
b = b + e;
i = i + 1;
}
//notches
while(i2 <= a1){
p.setColor(Color.blue);//notch color
p.drawString("x",v2+2,y+3);//xaxis
p.drawString("x",x-4,v5+4);//yaxis
v5 = v5 + e;
v2 = v2 + d;
i2 = i2 + 1;
}
}
}
}
import java.awt.*;
import javax.swing.*;
}
}
/*
* this code is to accept a user input in order for him to
* change the ranges of the xaxis and yaxis to his needs
*/
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JTextField;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class ControlsB extends JPanel{
private static final long serialVersionUID = 1L;
public static int xaxis1,xaxis2,yaxis3,yaxis4;
//public int xaxis11,xaxis22,yaxis33,yaxis44;
//public Object ControlsB;
//private Graph graph;
//public static Graphics p;
public String s;
public ControlsB(Box box2) {
JButton btn1 = new JButton("Resize");
final Box 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
//x-axis
b1.add(new JLabel("x-axis "));
b1.add(new JLabel("from"));
final JTextField f1 = new JTextField(" 0");
f1.setMaximumSize(new Dimension(100,30));
b.add(btn1);
}
protected Object Integer(int xaxis12) {
return null;
}
}
现在这个程序的问题是;在 ControlsB 我有一个方法将控件放在底部(在黄色框/图表下),现在这些控件应该接受x轴线上的图形范围(x -axis仅在此刻,因为y轴的代码还没有准备好)。当用户按下“调整大小”按钮时,图表应该会显示更改。
然而,这种情况并没有发生,而按钮却一无所获......我无法弄清楚我的错误。
在 ControlsB 文件中,我有 btn1 的动作侦听器,即“调整大小”按钮,按下底部它将文本字段输入(f1和f2)更改为整数并分配给x轴1,x轴2等...
现在我使用这一行从这些变量(在动作监听器方法中找到)到类 Graph.java 的引用: public static int xaxis11 = ControlsB.xaxis1; < / em>的
任何人都可以告诉我这个问题的最佳解决方案是什么...... ?? ..
注意:所有这些文件都会编译。但图表没有出现。
答案 0 :(得分:1)
目前编码的方式是,您只分配xaxis11
,xaxis22
,yaxis33
和yaxis44
一次。变量在ControlsB
中更改时不会动态更新。这意味着您只需在每次值更改时更新它们。为此,请向Graph
类添加方法:
public static void updateGraph() {
xaxis11 = ControlsB.xaxis1;
xaxis22 = ControlsB.xaxis2;
yaxis33 = ControlsB.yaxis3;
yaxis44 = ControlsB.yaxis4;
}
然后,当用户更改ControlsB
中的值时,请致电Graph.update()
。确保在发生这种情况时也要重新调用。
另请注意,将所有这些内容都设为静态不是您唯一的选择。您还可以简单地将对象引用为另一个类的字段,在构造函数中设置它,并在必要时调用它上面的方法。由于这个问题,您可能会遇到一些实现问题,因为使一切静态可能会影响您在对象上调用repaint()的能力,为了更新它,您需要这样做。
该问题的解决方法是将repaint()
添加到我上面概述的updateGraph方法的底部。
答案 1 :(得分:1)
当您在Graph
中设置静态变量时,您正在ControlB
中复制变量,因此当您在ControlB
中进行变换时,这些变化不会反映在Graph
。而是通过ControlB
访问变量(最好通过ControlB
中的公共方法)
<强>更新强>
启用调用重绘,删除Graph
和ControlsB
的所有静态修改;添加一个包含图形实例的变量到ControlsB
并将该实例传递给它的构造函数
public class ControlsB extends JPanel
{
Graph my_graph;
//...
public ControlsB(Box box2, Graph graph)
{
my_graph = graph;
// ...
}
}
然后将updateGraph()
中的Graph
方法更改为
public void updateGraph(int xaxis1, xaxis2, yaxis3, yaxis4)
{
xaxis11 = xaxis1;
xaxis22 = xaxis2;
yaxis33 = yaxis3;
yaxis44 = yaxis4;
repaint();
}
并在按钮的actionperformed()
方法中调用它:
graph.updateGraph(xaxis1, xaxis2, yaxis3, yaxis4);
注意:您似乎没有在box2
构造函数中使用ControlsB
,因此您可以删除该参数。