2016-04-13 7 views
-2

Я хочу получить два параметра [a, b] в функции [уставки] из формы и использовать их в paintcomponent для рисования with.the проблема в том, что две переменные недоступны для всей панели .they доступна только [уставки] функцииПеременные, недоступные для всей панели

Вот код панели:

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); 
    } 
+1

Пожалуйста, разместите свой [mcve] (пожалуйста, прочитайте ссылку). –

+0

Вы вызывали 'repaint' после вызова' setpoints', потому что на основании вашего ограниченного фрагмента кода он должен работать – MadProgrammer

+0

Я вызываю функции setpoints в форме и посылаю параметры, но значения переменных a & b существуют только в функции заданных значений, но имеют значение нулевого значения вне функции, поэтому они не могут назначить значение в paintcomonent –

ответ

1

Вашей проблема похоже будет находиться здесь:

public void drawline1() { 
    int k = 0; 
    float x = p1; 
    // ..... etc 

    shape s = new shape(); // ****** HERE ****** 

Вы создаете новый объект формы в рамках метода drawline1 и внесения изменений в его состоянии, изменяя значения, которые своими внутренними полями, но этот объект форма не представляется отображаться в любом месте графического интерфейса, и поэтому внесение изменений в его состояние, вероятно, не повлияет ни на какие объекты формы, которые отображаются в графическом интерфейсе.

Решение НЕ создать новый объект формы в рамках этого метода, а скорее получить ссылку на объект формы, который в настоящее время отображается в графическом интерфейсе, а затем внесение изменений в государственных полей если этот отображаемый объект формы.

Как вы делаете этот ключевой процесс - это то, на что мы не можем ответить, потому что мы не знаем, где и как вы показываете визуализированный объект формы или какие переменные в настоящее время ссылаются на этот отображаемый объект формы. Таким образом, ваша задача - выяснить, какие переменные они есть, а затем передать их значение классу, который содержит этот метод drawline1(), и тем самым позволить мутировать состояние отображаемого объекта формы.

Другие предложения:

  • Учиться и следовать соглашению об именах Java, например, все имена классов должны начинаться с заглавной буквы, так public class Shape не public class shape. Это имеет значение, так как это облегчит другим (нашим учителям) понимание вашего кода.
  • Подробнее о представлении/логическом разделении, включая M-V-C, который обозначает Model-View-Controller. Если вы можете перефакторировать свой код так, чтобы логический код находился в своем собственном классе, гораздо легче отлаживать и исправлять эти типы ошибок.