我绘制一条线后有一个动作监听器的问题,基本上它只工作一次,例如,我的应用程序正在下载一个图像,而不是你选择两个点,首先是左键鼠标,第二个是右键,比你点击“连接点”按钮,它正在绘制一条线。这很有用,我可以使用很多行等。但是当我关闭带有图像的窗口并重新加载它时,“连接点”按钮停止工作。 Dk该怎么做。这是代码:
绘画线部分:
public void paint(Graphics g) {
super.paint(g);
myPaint(g);
}
private void myPaint(Graphics g) {
g.drawLine(lx1, ly1, px2, py2);
}
}
ActionListener部分:
public void actionPerformed(ActionEvent e) {
if(e.getSource()==painterka){
Graphics g = imadzysko.getGraphics();
paint(g);
lx1=0;
ly1=0;
px2=0;
py2=0;
}
}
带有图形部分的面板:
void diagramKY (JFrame windower, String tyt, String content) {
Listener listener = new Listener();
panelik.setLayout(null);
painterka = new JButton("Connect Points");
windower = new JFrame("");
windower.setTitle(tyt+" - diagram");
windower.setSize(800, 600);
windower.setVisible(true);
windower.setLocationRelativeTo(null);
URLdownloader.fileUrl("http://stooq.pl/c/?s="+content+"&c=1d&t=l&a=lg",
content+".png","");
imadzysko = new ImagePanel(new ImageIcon(content+".png").getImage());
panelik.add(imadzysko);
panelik.add(painterka);
imadzysko.addMouseListener(new MyMouseListener());
painterka.addActionListener(listener);
Insets insets = panelik.getInsets();
Dimension size = imadzysko.getPreferredSize();
imadzysko.setBounds(20 + insets.left, 20 + insets.top,
size.width, size.height);
size = painterka.getPreferredSize();
painterka.setBounds(630 + insets.left, 20 + insets.top,
size.width, size.height);
panelik.repaint();
imadzysko.repaint();
windower.add(panelik);
好吧,有什么建议吗? :)
答案 0 :(得分:3)
1)创建面板,将其放入GUI,最后的代码行为
windower.setLocationRelativeTo(null);
windower.setVisible(true);
另外,您的面板永远不会在屏幕上显示
2)不要使用setBounds()等..因为存在LayoutManagers
windower.add(panel);
然后您的面板填充整个JFrame区域
3)永远不要在Swing代码中使用paint(Graphics g)
,只使用paintComponent(Graphics g)
来避免向GUI发送不期望的输出
4)不要在运行时创建新的Top-level Containers,因为弹出窗口只创建一个JDialog或JWindow,并将其重新用于另一个Action
5)你有Concurency in Swing问题,你的GUI冻结,因为等待硬和长时间的代码,实现SwingWorker,有类似的例子
6)如果要显示某些图片或图片,请查找放置在Icon
中的JLabel7)在发布问题之前确实需要阅读2D Graphics教程
答案 1 :(得分:1)
Graphics g = imadzysko.getGraphics();
永远不要那样做。 Java GUI应该在被告知时进行绘制。到那时,将调用paint(Graphics)
或paintComponent(Graphics)
。那么这幅画。