如何调用paintcomponent方法?

时间:2018-10-19 09:08:09

标签: java methods paintcomponent

您好,我做了一个public class UnitOfWork : IUnitOfWork { //Db context Infomaster _dbContext; //User is a model from my EF public IRepository<User> UserRepository { get; private set; } public UnitOfWork() { _dbContext = new Infomaster(); UserRepository = new Repository<User>(_dbContext); } public int Commit() { return _dbContext.Save(); } } ,并且想在单击按钮时调用actionlistener方法吗?

我已经用谷歌搜索了,但是没有运气。

这里是paintComponent

actionlisetener

这是方法

graf.addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent e) {
                    graf();

                }

怎么称呼它?

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

覆盖您要绘制的paintComponent对象的JComponent方法。

JComponent c = new JComponent() {
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);

        int width = Integer.parseInt(xinwindow.getText());
        int hight = Integer.parseInt(yinwindow.getText());

        g.setColor(Color.black);
        g.drawLine((width/2)- 1, 0, (width/2) +1 , hight);
    }
}

然后添加

c.revalidate();
c.repaint();

处理actionPerformed中的点击后。

答案 1 :(得分:0)

您应该从一些示例开始,以构建GUI。

static用于一个曾经发生的全局实例;每堂课一个。尝试删除所有内容,仅删除程序的入口点:

public static void main(String args) {
    JFrame appWindow = new MyFrame();
    SwingUtilities.invokeLater(() -> appWindow->setVisible(true));
}

public class MyFrame extends JFrame {
    private MyPanel panel;
    public MyFrame() {
        panel = new MyPanel();
        add(panel);
        panel.addClickListener(evt -> panel.repaint(50L));
     }
}

public class MyPanel extends JPanel {

     @Override
     public void paintComponent(Graphics g) {
         Graphics2D g2 = (Graphics2D) g;
         g2.setColor(Color.RED);
         g2.drawRectangle(40, 40, getWidth() - 80, getHeight() - 80);
     }
}

其机制如下:

  • 在swing的事件分配线程上处理单击。
  • 这里说在50毫秒内repaint到面板。
  • 稍后,在删除背景和绘制子组件的结合中,从swing框架调用了repaintComponent

paintComponent中,所有较新的Java版本的Graphics参数实际上是一个Graphics2D,它具有许多不错的方法。