//如果实在拿不准图片的相对路径,可以写绝对路径比如d:\\workspace....\\xx.jpg
主要原因: 因为课程时间紧 , 实际工作中遇见需要使用java来开发客户端的情况较少. javaEE用得比较多.
其他原因:
1: awt,swing 可以使用的组件很少.
2: 实现简单的东西, 代码量稍微有点多
3: 运行效率比c/c++等写出来的慢
4: 开发出来的界面,外观不太美观
5: 没有C# 等开发桌面程序方便.效率高,
但是建议学有余力的时候, 可以看看GUI , 其实很简单的
原因如下:
1: 现在主要推荐使用javaFX ,美观,组件丰富. 写起来的东西还是比较漂亮的, 也可以使用BeautyEye 等外观 .(BeautyEye 是国人开发的swing外观,非常漂亮)如下,
我用BeautyEye 写了一个保存读书笔记的程序
2: 自用的软件工具, 要是每次都是在控制台输入输出, 很别扭的,写个GUI界面,还是舒服点的
3: 利用可视化的插件工具,可以简化开发的难度,比如 windowbuilder 和JavaFX Scene Builder
插件拖拖拉拉就搞定.
4: 旧的java客户端应用, 还是需要有程序员去升级和维护的
五子棋练习
练习井字棋 写完了JavaScript版本 ,手痒又花了点时间改成了java版
喜欢玩拼图. 以前老手机就有拼图,简简单单,网上的拼图程序太花哨了,所以自己写了一个偶尔玩玩
有的网页上百张图, 看起来眼花, 就用swing来显示图片的小工具.(使用JSoup解析网页)
( ↑按钮 就是取消保存图片(删除), ↓按钮就是保存图片)比我在网页上右键保存方便多了...
当然了网上还是有图形界面的视频,比如用java做 联机版坦克大战, 超级玛丽等等
代码如下:
import java.awt.*import java.awt.event.*
import javax.swing.*
public class GraExp extends JFrame
{
CInstead c1=new CInstead()
Container c
JLabel lbl1=new JLabel("姓名:" )
JLabel lbl2=new JLabel("密码:" )
JTextField tf1=new JTextField(10),
tf2=new JTextField(10)
public GraExp()
{
setContentPane(c1)
c=getContentPane()
c.setLayout(new FlowLayout(FlowLayout.LEFT))
c.add(lbl1)
c.add(tf1)
c.add(lbl2)
c.add(tf2)
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE)
setSize(new Dimension(400,300))
show()
}
public static void main(String[] args)
{
GraExp ge=new GraExp()
}
class CInstead extends JPanel
{
ImageIcon icon
Image img
public CInstead()
{
icon=new ImageIcon(GraExp.class.getResource("333.png" ))
img=icon.getImage()
}
public void paintComponent(Graphics g)
{
super.paintComponent(g)
g.drawImage(img,0,0,null )
}
}
}
程序分析:
JComponent.paint先绘制组件,然后绘制组件的边框,再绘制组件的子组件。调用的顺序确保组件、边框和子组件都是可视的。如果组件有一个 UI代表,则JComponent.paintComponent调用该代表的Update方法,该方法为不透明组件擦除背景,然后绘制组件。
CInstead是一个不透明的组件,如果重载paint方法,其背景图是无法被擦除的,因此,即使更新了组件的所有包含组件,在界面上是看不到的。所以必须重载paintComponent方法,在绘制子组件前先擦除背景。
对双缓存组件,paint方法负责把组件绘制到屏外缓存中,然后把屏外缓存拷贝到组件的屏上代表中,正因为如此,不建议为Swing组件重载paint,如果需要重新定义如何绘制组件,那么就重载paintComponent()。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)