paintComponent()

时间:2016-03-09 21:04:21

标签: java swing paintcomponent

问题涉及我项目中的两个类:主要类和绘图类。 主类创建JFrame并在其中放置2个JPanel。 第一个JPanel包含输入数字的JTextFields,以及用于选择不同选项的JButtons,还有一个“开始”按钮和一个重置按钮。第二个JPanel是绘图类的一个实例。

第二类,绘图类应该绘制图形,然后绘制数字的视觉表示(三角形/梯形)。基本上应该在启动项目时绘制图形(直到现在都没有问题),然后在按下开始按钮后绘制数字(没有任何反应)。 以下是与问题相关的部分代码。

Public class MainMenu extends JFrame implements ActionListener {
  private JPanel mainPanel;      
  public static void main(String[] args) {
    MainMenu app = new MainMenu();
    app.setVisible(true);
    app.setResizable(false);
    app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    app.setBounds(250, 200, 1200, 600); 
  }

  public MainMenu() {
    drawing = new DrawingTool();
    mainPanel.add(drawing);    //draws the graphs on launch
    //extra code. not relevant
  }

  public void Run(){
    // more code
    drawing.updateVariables(numberA,numberB,numberC,operation,precision);
  }

第二课

public class DrawingTool extends JPanel{
boolean numbersUpdated=false;
public void updateVariables(Nr nrA, Nr nrB, Nr nrC, int op, int prec){
  fzzyA = nrA;
  fzzyB = nrB;
  fzzyC = nrC;
  operation = op;
  precision = prec;
}
public void paintComponent(Graphics g){
    //draw the graphs - this works
    if(numbersUpdated){
    //draw the numbers
    }
 }

此外,如果我想将绘图JPanel重置为仅通过按下重置按钮绘制图形的点,是否只能将numbersUpdates设置为false?

1 个答案:

答案 0 :(得分:2)

  

然后在按下开始按钮后绘制数字(没有任何反应)。

每当你更改Swing组件的属性时,你需要调用repaint()来告诉组件自己绘制。

因此,在您的updateVariables(...)方法中,您需要在方法的末尾添加repaint()语句。