在 Java 中绘制按钮和线条



我想要一个包含 5 个按钮的框架(或类似按钮(,每个按钮位于特定坐标(不是矩形顺序或严格的网格(和一些连接某些按钮的线条。

我最初的方法是:

  1. 打开框架
  2. 将按钮放置在所需坐标处
  3. 使用按钮的坐标在按钮之间绘制线条

问题是,我可以放置按钮或画线。我从2个晚上开始在网上搜索,只找到了可以做或的解决方案。而且我不知道为什么它不起作用。

这里的这个很好地解释了如何绘制多条线:

如何在 Java 中画线

但是我在与行相同的字段(组件(中没有任何可见按钮。无论我尝试哪种方法,它们总是要么不可见,要么在另一个区域。

如果有人能给我一个真实的例子,并附上简短的解释,我将不胜感激。我对Java很陌生,教"我自己",...

谢谢,卢本雅

在MadProgrammer的评论和eatinasandwich的回答之后编辑:我同意,这些布局经理可能会做得很好。我读过其中的一些,并认为如果您使用固定和矩形布局,它们会有所帮助。但是,我想要这样的东西(见下文(。因此,我想对整个程序进行编程,这使我可以轻松更改位置和/或添加新按钮和相应的行。因此,我更喜欢坐标而不是布局管理器。(此处布局:http://4.bp.blogspot.com/-hSkZGDick6o/VIfkt-m6ZvI/AAAAAAAAAMw/MA2JunqHu0Q/s1600/Layout.png,还不能上传图片(。 好!布局管理员可以做到这一点!

您通常希望将面板用于要绘制的任何内容。我想出了一个简单的例子。我将向您展示面板类,因为框架部分有些微不足道。您只需将此面板添加到正在创建的框架中即可。

也只是关于代码的几点。MadProgrammer提到不使用绝对定位,他是对的。这就是为什么当我覆盖paintComponent(重绘事物的方法(时,我使用按钮的位置来计算我的x和y值。我还使用 JLabels 作为网格布局的分隔符。你不需要这样做。事实上,我鼓励您浏览布局管理器并找到最有效的方法(可能是布局管理器和不同面板的组合(。

import java.awt.Color;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Point;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class MyPanel extends JPanel{
    JButton button1 = new JButton("Button 1");
    JButton button2 = new JButton("Button 2");
    JButton button3 = new JButton("Button 3");
    JButton button4 = new JButton("Button 4");
    public MyPanel() {
        setLayout(new GridLayout(3, 3));
        setSize(512, 512);
        setOpaque(false);
        add(button1);
        add(new JLabel());
        add(button2);
        add(new JLabel());
        add(new JLabel());
        add(new JLabel());
        add(button3);
        add(new JLabel());
        add(button4);
    }
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.RED);
        Point p1 = button1.getLocation();
        p1.x += button1.getWidth() / 2;
        p1.y += button1.getHeight() / 2;
        Point p2 = button4.getLocation();
        p2.x += button4.getWidth() / 2;
        p2.y += button4.getHeight() / 2;
        g.drawLine(p1.x, p1.y, p2.x, p2.y);
        Point p3 = button2.getLocation();
        p3.x += button2.getWidth() / 2;
        p3.y += button2.getHeight() / 2;
        Point p4 = button3.getLocation();
        p4.x += button3.getWidth() / 2;
        p4.y += button3.getHeight() / 2;
        g.setColor(Color.BLUE);
        g.drawLine(p3.x, p3.y, p4.x, p4.y);
    }

}

最新更新