我想从表单中获取[setpoints]函数中的两个参数[a,b],并在paintcomponent中使用它们来绘制。问题是整个面板无法访问两个变量。它们只能通过[设定点]功能
以下是小组的代码:
public class shape extends javax.swing.JPanel {
public int a;
public int b;
public shape() {
initComponents();
}
public void setpoints(int x0,int y0)
{
this.a=x0;
this.b=y0;
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.blue);
g.drawLine(a, b, a,b);
}
}
公共类NewJFrame扩展了javax.swing.JFrame {
public NewJFrame() {
initComponents();
}
public float p1;
public float p2;
public float p3;
public float p4;
public void drawline1(){
int k = 0;
float x = p1;
float y = p2;
float DX = p3 - p1;
float DY = p4 - p2;
float m=DY/DX;
int rx,ry;
table.getColumnModel().getColumn(1).setHeaderValue("Round(X)");
table.getColumnModel().getColumn(2).setHeaderValue("Round(Y)");
table.getTableHeader().repaint();
DefaultTableModel model = (DefaultTableModel) table.getModel();
model.setRowCount(0);
model.addRow(new Object[]{k, x, y, x, y});
shape s=new shape();
s.setpoints((int)x, (int)y);
do{
if(DX>DY){
k++;
x++;
y=y+m;
rx=Math.round(x);
ry=Math.round(y);
model.addRow(new Object[]{k, rx, ry, x, y});
s.setpoints(rx, ry);
}
if(DY>DX){
k++;
y++;
x=x+(1/m);
rx=Math.round(x);
ry=Math.round(y);
model.addRow(new Object[]{k, rx, ry, x, y});
s.setpoints(rx, ry);
}
}
while(y < p4 && x < p3);
}
答案 0 :(得分:1)
您的问题似乎位于此处:
public void drawline1() {
int k = 0;
float x = p1;
// ..... etc
shape s = new shape(); // ****** HERE ******
您正在drawline1方法中创建一个新的形状对象,并通过更改其内部字段所持有的值来更改其状态,但此形状对象似乎不会显示在GUI中的任何位置,因此制作更改其状态可能不会影响GUI中显示的任何形状对象。
解决方案是 NOT 在此方法中创建新的形状对象,而是获取对当前在GUI中显示的形状对象的引用,然后如果显示形状对象,则对状态字段进行更改。
如何执行此关键过程是我们无法回答的问题,因为我们不知道您在何处或如何显示可视化形状对象或当前哪些变量引用此显示的形状对象。因此,您的工作是找出这些变量,然后将它们的值传递给包含此drawline1()
方法的类,从而允许该方法改变所显示的形状对象的状态。
其他建议:
public class Shape
不是public class shape
。这很重要,因为它会让其他人(我们!您的老师)更容易理解您的代码。