大家帮我调试下,共10来行代码。找不出问题。闷。

孤尽JavaSea 2010-03-01 02:34:10
import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JFrame;

public class TestLine extends JFrame{
TestLine(){
setBounds(100, 100, 500, 375);
setVisible(true);
Graphics xx = this.getGraphics();
xx.setColor(Color.RED);
xx.drawLine(100, 100, 200, 200);
}
public static void main(String[] args) {
new TestLine();
}
}


想画一条直线上去,怎么会这么难呢????
...全文
194 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
mycity21 2010-03-01
  • 打赏
  • 举报
回复
因为程序在运行期间,是会不断地刷新界面,也就是不断地调用程序的paint()方法,界面的显示是按paint()里面的代码绘制,你要画线,也要在paint()里面实现才行。
py330316117 2010-03-01
  • 打赏
  • 举报
回复
这个就是顺序的问题,上面说的很清楚了,专业术语就叫组件重绘
zliuzz 2010-03-01
  • 打赏
  • 举报
回复
对。。。木有graphics对象。。。你用啥子画么。。。graphics相当于一个画笔
netjourney 2010-03-01
  • 打赏
  • 举报
回复
That's funny!
netjourney 2010-03-01
  • 打赏
  • 举报
回复
来了个牛人。

9楼的说的很清楚了,如果了解事件和回调模式,理解起来应该没有问题。
xiesisi3 2010-03-01
  • 打赏
  • 举报
回复
(因为你在构造方法里做的this.getGraphics().drawLine(100,100,200,200)是不可能修改到paint方法的)

多了个没,去掉吧。。。汗…………CSDN不能自己编辑太悲剧了。
netjourney 2010-03-01
  • 打赏
  • 举报
回复
awt是事件编程模型,详细代码的顺序直接决定了事件响应的顺序,我想应该从这方面解释。
具体还是看书吧,因为我对awt不熟,只是当年看书的时候留下的一点记忆,呵呵
xiesisi3 2010-03-01
  • 打赏
  • 举报
回复
是这样的,你源代码的顺序是
setVisible(true);
Graphics xx = this.getGraphics();
xx.setColor(Color.RED);
xx.drawLine(100, 100, 200, 200);

也就是说,先setVisible(true);然后再drawLine(),就是说你先让它显示出来了再再它上面画,从现实中好象逻辑是这样的,但其实它已经输出到屏幕上, 就不能再变化,所以你再在上面画线也是没用的。

有的人会说了,那我把屏幕刷新(就是调用repaint方法)就可以了啊,但这样想大错特错。
repaint方法实际上最后是调用paint方法的,只要你没修改过paint方法(因为你在构造方法里做的this.getGraphics().drawLine(100,100,200,200)是不可能没修改到paint方法的),那么它就会按照原来的样子显示,原来当然就是一张白纸了,什么都没有。

又有的人说了,那么我先画线再显示怎么样啊。
请看下面:
首先getGraphics这个方法,你可以看API,是这样解释的:
public Graphics getGraphics()
Creates a graphics context for this component.This method will return null if this component is currently not displayable.
为组件创建一个图形上下文。如果组件当前是不可显示的,则此方法返回 null。
所以说你拿到的Graphics是一个null值,你是不可能用它来做什么事的。

那么难道就没有解决办法了吗?当然不是,既然我们都已经知道了它是根据paint方法来画的,那我们为什么不修改paint方法呢?

所以就有了2楼的答案。
还有。2楼的paint方法最好改成这样
Color c = g.getColor();
g.setColor(Color.RED);
g.drawLine(100, 100, 200, 200);
g.setColor(c);

维持现场也是比较重要的,切记。

netjourney 2010-03-01
  • 打赏
  • 举报
回复
去看书吧,awt没几页,你会很快发现答案的,不过答案可能也不能令你满意。
深山老叔 2010-03-01
  • 打赏
  • 举报
回复
引用 3 楼 java_gannbare 的回复:
楼上,恳请你解释一下,为什么这样??


应该是重写了paint方法
一头头 2010-03-01
  • 打赏
  • 举报
回复
引用 3 楼 java_gannbare 的回复:
楼上,恳请你解释一下,为什么这样??


我不瞒你说哇 我学艺不精的 我也是跟你差不多的时候开始学Java的
我就知道应该这样 至于为什么 我不是很清楚
深山老叔 2010-03-01
  • 打赏
  • 举报
回复
帮忙顶下。。。

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

public class TextPaneDraw extends JFrame{
private JTextPane textPane = new JTextPane(){
public void paintComponent(Graphics g){
super.paintComponent(g);
g.drawLine(20, 20, 80, 20);
}
};
public TextPaneDraw(){
Container c = getContentPane();
c.setLayout(new BorderLayout());
c.add(textPane, "Center");
}
public static void main(String[] args){
TextPaneDraw ppd = new TextPaneDraw();
ppd.setSize(400, 400);
ppd.setVisible(true);
}
}
xierangh 2010-03-01
  • 打赏
  • 举报
回复
TestLine(){
Graphics xx = this.getGraphics();
xx.setColor(Color.RED);
xx.drawLine(100, 100, 200, 200);
setBounds(100, 100, 500, 375);
setVisible(true);

}
这样也是可以的,2楼写的去看下paint 在哪里调用的就晓得 看看源代码
孤尽JavaSea 2010-03-01
  • 打赏
  • 举报
回复
楼上,恳请你解释一下,为什么这样??
一头头 2010-03-01
  • 打赏
  • 举报
回复
画画的东西要放到paint里面去 就好了

import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JFrame;

public class TestLine extends JFrame {
TestLine() {
setBounds(100, 100, 500, 375);
setVisible(true);



}

public void paint(Graphics g) {
g.setColor(Color.RED);
g.drawLine(100, 100, 200, 200);
}

public static void main(String[] args) {
new TestLine();
}
}
w5325698 2010-03-01
  • 打赏
  • 举报
回复
调用有误,需要在面板上画,而且设置为可见也必须是在最后
内容概要:本文介绍了一个基于Python与RAG(检索增强生成)技术的博物馆展品智能问答系统的设计与实现。系统通过整合多源异构的展品资料,经过数据清洗、语义切分、向量化表示与FAISS索引构建知识库,结合混合检索与结果重排机制提升语义匹配精度,并在生成阶段引入严格的提示词约束,确保答案基于真实资料、避免事实性错误。系统采用模块化架构,涵盖数据采集、向量索引、检索重排、上下文构造、答案生成及服务治理各层,支持自然语言提问、上下文理解与引用溯源,具备高可解释性与可维护性,并通过FastAPI提供稳定接口服务。; 适合人群:具备一定Python编程基础,从事自然语言处理、知识库构建或智能问答系统开发的研发人员,以及博物馆信息化、数字人文领域的技术人员与研究人员。; 使用场景及目标:① 实现博物馆场景下高准确率、可追溯的智能问答服务,支持展品背景、用途、纹饰、历史关联等专业问题的精准回答;② 解决传统问答系统中存在的知识失真、语义理解偏差与资料碎片化问题,提升数字资源利用率与公众服务能力;③ 为数字博物馆、文化遗产传播等领域提供可扩展的技术框架与实践参考。; 阅读建议:此资源不仅提供完整的技术实现路径与部分代码示例,还深入剖析了项目挑战与解决方案,建议读者结合代码实践,重点关注数据清洗、混合检索、上下文构造与生成约束等关键环节,并可根据实际需求扩展多模态支持、多语言问答或与现有管理系统集成。
内容概要:本文围绕面向低碳经济运行目标的多微网能量互联优化调度问题展开深入研究,提出并实现了基于Matlab的优化调度模型与求解方法。研究构建了一个涵盖多种分布式能源、储能系统及多元负荷的多微网协同运行框架,综合考虑碳排放限额、电网交互成本、能源利用效率与系统可靠性等多重因素,建立了以最小化碳排放和运行成本为核心的多目标优化调度模型。通过引入先进的智能优化算法(如改进的灰狼优化算法、非支配排序蜣螂优化算法NSDBO等)对高维非线性模型进行高效求解,实现了多微网系统在复杂运行场景下的能量协同分配与全局最优调度。文中结合典型算例进行了仿真验证,结果表明所提模型与算法在降低系统碳排放强度、提升可再生能源消纳率和优化综合运行经济性方面具有显著优势与良好收敛性。; 适合人群:具备电力系统分析、能源互联网、优化算法或自动化控制等相关专业知识背景,从事新能源、微电网、综合能源系统、低碳调度等领域研究的硕士/博士研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于多微网系统在低碳经济目标下的优化调度方案设计与仿真验证;②为综合能源系统中“源-网-荷-储”多主体协同优化提供可复现的模型架构与算法实现参考;③支持科研人员复现先进智能优化算法(如NSDBO、GWO等)并在此基础上开展算法改进与创新应用研究。; 阅读建议:读者应结合提供的Matlab代码,深入理解模型的数学推导、约束构建逻辑与算法实现细节,建议在掌握基本优化理论、电力系统运行原理和Matlab编程技能的基础上,动手运行代码,调整参数设置,尝试扩展模型结构或替换优化算法,以全面掌握多微网优化调度的核心机制与技术要点。

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧