一: 首先理清业务逻辑
两个窗口, 第一个主窗口, 是用于填写信息的, 点击按钮后,跳转到第二个窗口,.
第二个对话框窗口 ,用于显示需要打印的信息, 以及打印到文档
二: 确定需要的技术, java图像界面主要使用awt和swing
swing里面的控件比较丰富, 且功能强大 .
三: 效果图片
四: 完整的参考代码
import java.awt.*import java.awt.event.*
import java.io.*
import javax.swing.*
//定义一个主窗口类
public class MainFrame extends JFrame {
public static final String FILE_PATH = "c:\\print.txt"//常量,用于指定信息的保存路径
//定义主要的组件
private final JTextField jtf1,jtf2,jtf3
private final JCheckBox jcb1,jcb2,jcb3
private final JRadioButton jrb1,jrb2
public MainFrame() {
setTitle("信息提交窗口")//设置窗口标题
setSize(350, 320)//设置窗口大小
setLocationRelativeTo(null)//让窗口居中
setDefaultCloseOperation(EXIT_ON_CLOSE)//当主窗口关闭的时候退出jvm虚拟机
JPanel jp = new JPanel(new GridLayout(5, 1, 2, 1))//定义主显示面板,布局为表格布局5行1列,水平间距2,垂直间距1
JPanel jp1 = new JPanel()//第一行的组件面板
JLabel jl1 = new JLabel("姓名")
jtf1 = new JTextField(10)
jp1.add(jl1)
jp1.add(jtf1)
JPanel jp2 = new JPanel()//第二行的组件面板
JLabel jl2 = new JLabel("学号")
jtf2 = new JTextField(10)
jp2.add(jl2)
jp2.add(jtf2)
JPanel jp3 = new JPanel()//第三行的组件面板
JLabel jl3 = new JLabel("性别")
jrb1 = new JRadioButton("男")
jrb2 = new JRadioButton("女")
jrb1.setSelected(true)
ButtonGroup bgs = new ButtonGroup()
bgs.add(jrb1)
bgs.add(jrb2)
jp3.add(jl3)
jp3.add(jrb1)
jp3.add(jrb2)
JPanel jp4 = new JPanel()//第四行的组件面板
JLabel jl4 = new JLabel("选择爱好")
jcb1 = new JCheckBox("游泳")
jcb2 = new JCheckBox("篮球")
jcb3 = new JCheckBox("跑步")
jp4.add(jl4)
jp4.add(jcb1)
jp4.add(jcb2)
jp4.add(jcb3)
JPanel jp5 = new JPanel()//第五行的组件面板
JLabel jl5 = new JLabel("自我介绍")
jtf3 = new JTextField(22)
jp5.add(jl5)
jp5.add(jtf3)
//添加到主显示面板
jp.add(jp1)
jp.add(jp2)
jp.add(jp3)
jp.add(jp4)
jp.add(jp5)
jp.setBorder(BorderFactory.createTitledBorder("填写资料"))//设置主显示面板的边框
JButton jb = new JButton("跳转到打印页")
jb.addActionListener(new ActionListener() {//按钮事件
public void actionPerformed(ActionEvent e) {//获取组件的信息
StringBuilder sb = new StringBuilder()//用于连接信息
String name = jtf1.getText()
sb.append("姓名:" + name + "\r\n")
String num = jtf2.getText()
sb.append("学号:" + num + "\r\n")
String sex
if (jrb1.isSelected()) {
sex = "男"
} else {
sex = "女"
}
sb.append("性别:" + sex + "\r\n")
String aihao = ""
if (jcb1.isSelected()) {
aihao += jcb1.getText()
}
if (jcb2.isSelected()) {
aihao += " " + jcb2.getText()
}
if (jcb3.isSelected()) {
aihao += " " + jcb3.getText()
}
sb.append("爱好:" + aihao + "\r\n")
String jieshao = jtf3.getText()
sb.append("自我介绍:" + jieshao + "\r\n")
new PrintDailog(sb.toString(), FILE_PATH).setVisible(true)//打开打印页面,并设置为可见
}
})
getContentPane().add(new JLabel("信息填写",JLabel.CENTER),BorderLayout.NORTH)
getContentPane().add(jp)
getContentPane().add(jb, BorderLayout.SOUTH)
}
public static void main(String[] args) {
new MainFrame().setVisible(true)
}
}
//定义一个对话框窗口类
class PrintDailog extends JDialog {
String info//用于接受信息
String filePath//文档的路径
private final JLabel jl2
public PrintDailog(String info, final String filePath) {
this.info = info
this.filePath = filePath
setModal(true)//模态为真,如果不关闭这个对话框,那么无法点击其他窗口
setTitle("信息打印页")//设置打印窗口的标题
setSize(300, 320)//设置打印窗口的大小
setLocationRelativeTo(null)//设置打印窗口居中
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE)//当点击关闭按钮时,该窗口销毁
JLabel jl1 = new JLabel("信息打印显示", JLabel.CENTER)
JTextArea jta = new JTextArea(info)
jta.setEditable(false)//不可编辑
jta.setLineWrap(true)//自动换行
JScrollPane jsp = new JScrollPane(jta)
jsp.setBorder(BorderFactory.createTitledBorder("信息"))
JButton jb1 = new JButton("打印")
JPanel jp = new JPanel(new GridLayout(2, 1))
JPanel jp1 = new JPanel()
jp1.add(jb1)
JPanel jp2 = new JPanel()
jl2 = new JLabel()
jp2.add(jl2)
jp.add(jp1)
jp.add(jp2)
add(jl1, BorderLayout.NORTH)
add(jsp)
add(jp, BorderLayout.SOUTH)
jb1.addActionListener(new ActionListener() {//点击打印的按钮的事件
public void actionPerformed(ActionEvent e) {
saveToFile()//信息打印到了文档
jl2.setText("信息已经打印到" + filePath)//显示出来
jl2.setForeground(Color.RED)//为了醒目设置颜色为红色
}
})
}
private void saveToFile() {//该方法用于保存信息到文档
try {
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filePath), "UTF-8"))
bw.write(info)
bw.close()
} catch (Exception e) {
e.printStackTrace()
}
}
}
五: 拓展
java 制作图像界面比较简单, 只需要熟练的掌握三大布局(流布局 表格布局 边界布局)和常用组件 , 就能制作出比较复杂的界面 . 所以理清业务逻辑, 才是重点
在按钮的ActionPerformed函数中:PrinterJob pj=PrinterJob.getPrinterJob()
pj.setPrintable(newPrintable());//设置打印类,关于打印类如何实现直接看API
if(pj.printDialog()){
try{
pj.print() //进行打印
}catch(PrinterExceptione){
System.out.println(e)
}
希望能帮到你了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)