重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
1.顶层容器
成都创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于网站制作、网站设计、抚松网络推广、小程序开发、抚松网络营销、抚松企业策划、抚松品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联公司为所有大学生创业者提供抚松建站搭建服务,24小时服务热线:028-86922220,官方网址:www.cdcxhl.com
什么是顶层容器?当我们使用Java进行图形编程的时候,图在哪里绘制呢?我们需要一个能够提供图形绘制的容器,这个容器就被称为顶层容器,你
也可以把它想象成一个窗口。顶层容器是进行图形编程的基础,一切图形化的东西,都必然包括在顶层容器中。在Swing中,我们有三种可以使用的顶层容器,
它们分别是:
JFrame:用来设计类似于Windows系统中的窗口形式的应用程序。
JDialog:和JFrame类似,只不过JDialog是用来设计对话框。
JApplet:用来设计可以在嵌入在网页中的Java小程序。
如果需要使用Swing制作一个窗口类程序,我们的代码看起来应该是这样:
import javax.swing.*;
public class KyodaiUI
extends JFrame {
……
}
2.控件
控件是构成应用程序界面的基本元素,按钮、文本框、进度条等,这些都是控件。控件(这里我们只讨论可视化控件)又可以分为容器控件和非容器控件。从字面
意义上来理解,容器控件就是能包含其他控件的特殊控件,例如,Java中的JPanel控件就属于容器型控件,我们可以在JPanel中放置按钮、文本框
等非容器控件,你甚至可以在JPanel中再放置若干个JPanel控件(值得注意的是,顶层容器也是容器型控件,每一个窗口应用程序中有且只能有一个顶
层容器控件,换句话说,顶层容器不能包括在其他的控件中)。
Java中的容器控件有很多,除刚才提到的JPanel外,还有
JTabbedPane、JScrollPane等,非容器控件有JButton、JLabel、JTextField等。如果你需要向某个容器型的控件
中添加控件,你可以使用 add(Component comp) 方法来实现,如:
JPanel panel = new JPanel();
JButton button = new JButton();
panel.add(button);
3.边框
虽然我们使用了不同前景色来区别不同的区域,然而却没有层次感,加上边框一定会漂亮许多。
在Java中,所有以J打头的Swing控件都可以使用setBorder方法来为自己设置边框。边框有很多种,线型、凸起、凹下、空的,你甚至可以自
由组合形成个人风格。所有的Border都必须使用javax.swing.BorderFactory中提供的静态方法来创建,比如:
Border border = BorderFactory.createBevelBorder(BevelBorder.LOWERED,
new Color(45, 92, 162),
new Color(43, 66, 97),
new Color(45, 92, 162),
new Color(84, 123, 200));
现在,我们将toolBar.setBackground(Color.white)改为toolBar.setBorder(border),立体效果是不是已经出现了?
一: 首先理清业务逻辑
两个窗口, 第一个主窗口, 是用于填写信息的, 点击按钮后,跳转到第二个窗口,.
第二个对话框窗口 ,用于显示需要打印的信息, 以及打印到文档
二: 确定需要的技术, 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 制作图像界面比较简单, 只需要熟练的掌握三大布局(流布局 表格布局 边界布局)和常用组件 , 就能制作出比较复杂的界面 . 所以理清业务逻辑, 才是重点
就写一个没有主函数的类不就可以了,一个实现显示文字的方法,一个实现显示图像的方法,然后在另一个类中调用,可以创建一个button,然后实现它的监听,然后执行那个类中的某个方法不就可以了,awt和swing没怎么学,写不出来
!!
package print; /*用java实现打印 ,java.awt中提供了一些打印的API, 要实现打印 ,首先要获得打印对象 ,然后继承Printable实现接口方法print ,以便打印机进行打印 , 最后用用Graphics2D直接输出直接输出 。 下面代码实现了简单的打印功能: */ import java.awt.BasicStroke; import java.awt.Color; import java.awt.Component; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Toolkit; import java.awt.RenderingHints; import java.awt.font.FontRenderContext; import java.awt.font.LineBreakMeasurer; import java.awt.font.TextAttribute; import java.awt.font.TextLayout; import java.awt.geom.Point2D; import java.awt.image.BufferedImage; import java.awt.print.Book; import java.awt.print.PageFormat; import java.awt.print.Paper; import java.awt.print.Printable; import java.awt.print.PrinterException; import java.awt.print.PrinterJob; import java.text.AttributedString; import javax.swing.JApplet; public class print implements Printable { /** */ /** * @param Graphic指明打印的图形环境 * @param PageFormat指明打印页格式(页面大小以点为计量单位,1点为1英才的1/72,1英寸为25.4毫米。A4纸大致为595×842点) * @param pageIndex指明页号 **/ public int print(Graphics gra, PageFormat pf, int pageIndex) throws PrinterException { System.out.println("pageIndex=" + pageIndex); Component c = null; //print string String str = "中华民族是勤劳、勇敢和富有智慧的伟大民族。"; //转换成Graphics2D Graphics2D g2 = (Graphics2D) gra; //设置打印颜色为黑色 g2.setColor(Color.black); //打印起点坐标 double x = pf.getImageableX(); double y = pf.getImageableY(); switch (pageIndex) { case 0: //设置打印字体(字体名称、样式和点大小)(字体名称可以是物理或者逻辑名称) //Java平台所定义的五种字体系列:Serif、SansSerif、Monospaced、Dialog 和 DialogInput Font font = new Font("新宋体", Font.PLAIN, 9); g2.setFont(font); //设置字体 //BasicStroke bs_3=new BasicStroke(0.5f); float[] dash1 = {2.0f}; //设置打印线的属性。 //1.线宽 2、3、不知道,4、空白的宽度,5、虚线的宽度,6、偏移量 g2.setStroke(new BasicStroke(0.5f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 2.0f, dash1, 0.0f)); //g2.setStroke(bs_3);//设置线宽 float heigth = font.getSize2D(); //字体高度 System.out.println("x=" + x); // -1- 用Graphics2D直接输出 //首字符的基线(右下部)位于用户空间中的 (x, y) 位置处 //g2.drawLine(10,10,200,300); Image src = Toolkit.getDefaultToolkit().getImage( "file:icons/filter.gif"); g2.drawImage(src, (int) x, (int) y, c); int img_Height = src.getHeight(c); int img_width = src.getWidth(c); //System.out.println("img_Height="+img_Height+"img_width="+img_width) ; g2.drawString(str, (float) x, (float) y + 1 * heigth + img_Height); g2.drawLine((int) x, (int) (y + 1 * heigth + img_Height + 10), (int) x + 200, (int) (y + 1 * heigth + img_Height + 10)); g2.drawImage(src, (int) x, (int) (y + 1 * heigth + img_Height + 11), c); return PAGE_EXISTS; default: return NO_SUCH_PAGE; } } public static void main(String[] args) { // 通俗理解就是书、文档 Book book = new Book(); // 设置成竖打 PageFormat pf = new PageFormat(); pf.setOrientation(PageFormat.PORTRAIT); // 通过Paper设置页面的空白边距和可打印区域。必须与实际打印纸张大小相符。 Paper p = new Paper(); p.setSize(590, 840); //纸张大小 p.setImageableArea(10, 10, 590, 840); //A4(595 X 842)设置打印区域,其实0,0应该是72,72,因为A4纸的默认X,Y边距是72 pf.setPaper(p); // 把 PageFormat 和 Printable 添加到书中,组成一个页面 book.append(new PrintTest(), pf); //获取打印服务对象 PrinterJob job = PrinterJob.getPrinterJob(); // 设置打印类 job.setPageable(book); try { //可以用printDialog显示打印对话框,在用户确认后打印;也可以直接打印 //boolean a=job.printDialog(); //if(a) //{ job.print(); //} } catch (PrinterException e) { e.printStackTrace(); } } }
采纳哦