简体   繁体   English

按下按钮时如何绘制垂直线?

[英]How can I draw vertical line when I press the button?

I am unable to draw line when I press the component in Java Swing. 当我按下Java Swing中的组件时,我无法画线。 How can I do this? 我怎样才能做到这一点? I already used paint method, my problem is when program executes paint method invoke automatically, DrawLine() method will be there in paint method, so is there any way that I can get the lines other than paint method? 我已经使用过paint方法,我的问题是当程序自动执行paint方法调用时,paint方法中会出现DrawLine()方法,所以除了paint方法以外,还有什么方法可以获取其他行吗?

Please give some suggestion. 请给一些建议。

Below code I have tried, it's displaying lines but I want to display the lines when I click the component. 在我尝试过的代码下面,它显示行,但是我想在单击组件时显示行。

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;

public class ReferenceLink1 extends JFrame 
{
    JLabel l1;
    JLabel l2;
    JPanel p1;

    ReferenceLink1()
    {               
        p1 = new JPanel();
        p1.setLayout(null);
        p1.setBackground(Color.ORANGE);
        p1.setOpaque(true);
        p1.setBounds(0,0,300,400);

        setLayout(null);
        l1 = new JLabel();
        l1.setText("l1");
        l1.setBounds(20, 40, 100, 40);
        l1.setHorizontalAlignment(SwingConstants.CENTER);
        l1.setBackground(Color.GREEN);
        l1.setOpaque(true);

        l2 = new JLabel();  ;
        l2.setText("l2");
        l2.setBounds(20, 100,100,40);
        l2.setBackground(Color.BLUE);
        l2.setHorizontalAlignment(SwingConstants.CENTER);
        l2.setOpaque(true);

        p1.add(l1);
        p1.add(l2);
        add(p1);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
        setBounds(0,0,400,400);
    }

    public void paint(Graphics g)
    {
        super.paint(g);
        g.drawLine(77,110,77,130);        
    }

    public static void main(String args[])
    {
        ReferenceLink1 rf = new ReferenceLink1();
    }
}
class Surface extends JPanel {

    private void doDrawing(Graphics g) {

        Graphics2D g2d = (Graphics2D) g;

        g2d.setColor(Color.blue);

        Dimension size = getSize();
        Insets insets = getInsets();

        int w = size.width - insets.left - insets.right;
        int h = size.height - insets.top - insets.bottom;

        Random r = new Random();

        for (int i = 0; i < 1000; i++) {

            int x = Math.abs(r.nextInt()) % w;
            int y = Math.abs(r.nextInt()) % h;
            g2d.drawLine(x, y, x, y);
        }
    }

    @Override
    public void paintComponent(Graphics g) {

        super.paintComponent(g);
        doDrawing(g);
    }
}

public class Points extends JFrame {

    public Points() {

        initUI();
    }

    private void initUI() {

        setTitle("Points");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        add(new Surface());

        setSize(350, 250);
        setLocationRelativeTo(null);
    }

    public static void main(String[] args) {

        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {

                Points ps = new Points();
                ps.setVisible(true);
            }
        });
    }
}

You could simply add a mouse listener to the label that represents your button. 您可以简单地将鼠标侦听器添加到表示您的按钮的标签上。

l2.addMouseListener(new MouseAdapter()
{
    public void mouseClicked(MouseEvent e)
    {
      p1.getGraphics().drawLine(77,110,77,130);
    }
});
public class ReferenceLink1 extends JFrame  {
    JLabel l1;
    JButton l2;
    JPanel p1;


    public static class MyListener implements ActionListener{

        Graphics g;

        public MyListener(Graphics g) {
            this.g = g;
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            g.drawLine(77, 110, 77, 130);

        }

    }

public ReferenceLink1() {

        p1 = new JPanel();
        setVisible(true);
        p1.setLayout(null);
        p1.setBackground(Color.ORANGE);
        p1.setOpaque(true);
        p1.setBounds(0,0,300,400);

        setLayout(null);
        l1 = new JLabel();
        l1.setText("l1");
        l1.setBounds(20, 40, 100, 40);
        l1.setHorizontalAlignment(SwingConstants.CENTER);
        l1.setBackground(Color.GREEN);
        l1.setOpaque(true);


        l2 = new JButton(); 
        l2.addActionListener(new MyListener(this.getGraphics()));
        l2.setText("l2");

        l2.setBounds(20, 100,100,40);
        l2.setBackground(Color.BLUE);
        l2.setHorizontalAlignment(SwingConstants.CENTER);
        l2.setOpaque(true);

        p1.add(l1);
        p1.add(l2);
        add(p1);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        setBounds(0,0,400,400);
    }

    public static void main(String args[]) {
        ReferenceLink1 rf = new ReferenceLink1();
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM