java简单画线程序

JFrame里添加了一个JLabell1想实现每次在JFrame里添加组件的时候把组件和l1用线连上··怎么实现啊··... JFrame里添加了一个JLabel l1
想实现每次在JFrame里添加组件的时候把组件和l1用线连上··怎么实现啊··
展开
 我来答
帐号已注销
2010-04-23 · TA获得超过5622个赞
知道大有可为答主
回答量:1459
采纳率:0%
帮助的人:1375万
展开全部
这个覆盖 paint 方法就可以了。

我帮你写好了,我采用的方法是:把内容画在一个 JPanel 里,然后用 setContentPane 添加到了 JFrame 上,这样做是因为定位问题:JFrame 有边框,绘制组件的时候坐标是算边框占位的,但是 drawLine 的时候是不算的,为了统一算边框,就用了这个办法。

下面是两个文件,第一个 MyFrame 是一个完整的工具,MyFrame 因为继承了 JFrame,用起来和 JFrame 一样用,另外提供了一个接口,addComponent(JComponent) 方法可以向里添加组件,会自动连线的。你只要 import ui 就可以用了。

然后第二个是测试类,可以看到我在 setVisible 之后添加的组件,它也能正确显示,证明 addComponent 方法可以随时调用,不用另外刷新。

---------------------------- MyFrame.java -----------------------------
package ui;

import java.awt.*;
import javax.swing.*;
import java.util.*;

class MyPanel extends JPanel {
private Vector<JComponent> comps;

public MyPanel () {
comps = new Vector<JComponent>();
setLayout(null);
}

public void paint (Graphics g) {
g.setColor(Color.BLACK);
for (int i=1; i<comps.size(); i++) {
g.drawLine(comps.get(0).getLocation().x+comps.get(0).getSize().width/2,
comps.get(0).getLocation().y+comps.get(0).getSize().height/2,
comps.get(i).getLocation().x+comps.get(i).getSize().width/2,
comps.get(i).getLocation().y+comps.get(i).getSize().height/2);
}
super.paintComponents(g);
}

public void addComponent (JComponent comp) {
comp.setOpaque(true);
comps.add(comp);
add(comp);
repaint();
}
}

public class MyFrame extends JFrame {
private MyPanel mp;

public MyFrame () {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mp = new MyPanel();
setContentPane(mp);
}

public void addComponent (JComponent comp) {
mp.addComponent(comp);
}
}

---------------------------- TestMyFrame.java -----------------------------
import ui.*;
import javax.swing.*;
import javax.swing.border.*;

public class TestMyFrame {
public static void main (String args[]) {
MyFrame mf = new MyFrame();
mf.setSize(500, 500);
mf.setLocationRelativeTo(null);
mf.setVisible(true);
testAddComponent(mf);
}

public static void testAddComponent (MyFrame mf) {
JLabel l1 = new JLabel("l1");
l1.setBorder(new EtchedBorder());
l1.setBounds(200, 100, 20, 20);
mf.addComponent(l1);

JLabel l2 = new JLabel("l2");
l2.setBounds(100, 150, 20, 20);
l2.setBorder(new EtchedBorder());
mf.addComponent(l2);

JLabel l3 = new JLabel("l3");
l3.setBounds(150, 150, 20, 20);
l3.setBorder(new EtchedBorder());
mf.addComponent(l3);

JLabel l4 = new JLabel("l4");
l4.setBounds(200, 150, 20, 20);
l4.setBorder(new EtchedBorder());
mf.addComponent(l4);
}
}
蓝版已行06
2010-04-23 · 超过10用户采纳过TA的回答
知道答主
回答量:83
采纳率:100%
帮助的人:30万
展开全部
写一个方法,把线的起点。终点,以参数的形式传给这个方法,在每次添加组件的时候调一次这个方法就好了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式