`
珊珊来了
  • 浏览: 11417 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

JavaSwing绘制杨辉三角形

阅读更多

今天收到一家公司面试题目,大致要求是:

1.用swing控件绘出杨辉三角形。(不能用edit之内的文本编辑控件)
要求:
a、测试在30行之内;
b、隔列对齐;
c、画出连线,连线要对齐,如附件图例中所示。
4、输出效果为等腰三角形的形状。
package com;

import java.awt.Component;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.RenderingHints;

import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

public class TestYHComp {
	public static void main(String[] args) {
		JDialog d = new JDialog();
		JScrollPane sp = new JScrollPane();
		
		YangHuiTable ybTable = new YangHuiTable(IYangHuiModel.DEFAULT);
//		ybTable.setYHRow(IYangHuiModel.DEFAULT);//30
		sp.setViewportView(ybTable);
		
		d.setContentPane(sp);
//		d.pack();
		d.setSize(800, 600);
		d.setLocationRelativeTo(null);
		d.setVisible(true);
		
		Point p = new Point(ybTable.getPreferredSize().width/2-sp.getViewport().getWidth()/2, 0);
		sp.getViewport().setViewPosition(p);
	}

}

class YangHuiTable extends JTable {

	public YangHuiTable() {
		this(IYangHuiModel.DEFAULT);
	}

	public YangHuiTable(int row) {
		this(row, new YangHuiTableModel());
	}

	public YangHuiTable(int row, IYangHuiModel model) {
		super(model);
		this.setYHRow(row) ;
	}

	public void init() {
		this.initValue();
		this.setShowGrid(false);
		this.getColumnModel().setColumnMargin(0);
		this.getTableHeader().setReorderingAllowed(false);
		this.getTableHeader().setResizingAllowed(false);
		this.setAutoResizeMode(AUTO_RESIZE_OFF);
		this.setDefaultRenderer(Object.class, new YangHuiRenderer());
	}

	private void initValue() {
		IYangHuiModel model = ((IYangHuiModel) this.getModel());
		int row = model.getYHRow();
		int[][] a = initArray(row);
		for (int i = 0; i < row; i++) {
			for (int j = 0; j <= i; j++) {
				int r = i * 2 + 1 ;
				int c = row - i + j * 2 ;
				this.setValueAt(a[i][j], r, c);
				if( this.getValueAt(r + 1, c -1 ) != null ){
					this.setValueAt(Constants.RIGHT_BOTTON |Constants.BOTTON_LEFT , r + 1, c - 1) ;//3+4
				}else{
					this.setValueAt(Constants.RIGHT_BOTTON, r + 1, c - 1) ;
				}
				this.setValueAt(Constants.LEFT_TOP | Constants.TOP_RIGHT, r + 1, c ) ;
				this.setValueAt(Constants.BOTTON_LEFT, r + 1, c +1 ) ;
			}
		}

	}

	private int[][] initArray(int row) {
		int[][] a = new int[row][row];
		for (int i = 0; i < row; i++)
			for (int j = 0; j < row; j++) {
				if (j < i) {
					a[i][j] = 1;
					if (j == 0) {
						a[i][j] = 1;
					} else {
						a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
					}
				} else {
					a[i][j] = 1;
				}
			}
		return a;
	}

	@Override
	public boolean isCellEditable(int row, int column) {
		return false;
	}
	
	public void setYHRow(int rowInt){
		((IYangHuiModel) this.getModel()).setYHRow(rowInt);
		init() ;
	}
}

class YangHuiTableModel extends DefaultTableModel implements IYangHuiModel {

	protected int row;

	public YangHuiTableModel() {
		this(DEFAULT);
	}

	public YangHuiTableModel(int row ) {
		super(row * 2 + 1, row * 2 + 1);
		this.row = row;
	}

	public int getYHRow() {
		return row;
	}

	public void setYHRow(int row) {
		this.row = row;
		this.setRowCount(row * 2 + 1);
		this.setColumnCount(row * 2 + 1);
	}

}

class YangHuiRenderer extends DefaultTableCellRenderer {

	protected boolean isShowLine = false;
	
	private Object value ;
	@Override
	public Component getTableCellRendererComponent(JTable table, Object value,
			boolean isSelected, boolean hasFocus, int row, int column) {
		this.value = value ;
		isShowLine = row % 2 == 0 && row + 1 != table.getRowCount();
		this.setHorizontalAlignment(JLabel.CENTER);

		return super.getTableCellRendererComponent(table, 
				isShowLine||row + 1 == table.getRowCount()?null:value, 
						isSelected,hasFocus, row, column);
	}

	private void paintLine(Graphics g){
		if ( isShowLine && value instanceof Integer){
			int lineInfo = (Integer)value ;
			if( (lineInfo | Constants.LEFT_TOP) == lineInfo){
				g.drawLine(0, getHeight()/2, getWidth()/2, 0);
			}
		    if( (lineInfo | Constants.TOP_RIGHT) == lineInfo){
		    	g.drawLine(getWidth()/2, 0, getWidth(), getHeight()/2);
		    }
			if( (lineInfo | Constants.RIGHT_BOTTON) == lineInfo){
				g.drawLine(getWidth(), getHeight()/2, getWidth()/2, getHeight());
			}
			if( (lineInfo | Constants.BOTTON_LEFT) == lineInfo){
				g.drawLine( getWidth()/2, getHeight(), 0, getHeight()/2);
			}
		}
	}
	
	@Override
	public void paint(Graphics g) {
		super.paint(g);
		if (isShowLine) {
			Graphics2D g2d=(Graphics2D)g;
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
            		RenderingHints.VALUE_ANTIALIAS_ON);
            paintLine(g) ;
		}
	}
}

interface IYangHuiModel extends TableModel ,Constants{

	public static final int DEFAULT = 30;
	
	public int getYHRow();

	public void setYHRow(int row);
}

interface Constants{
	
	public static final int LEFT_TOP = 0x00000001 ;
	
	public static final int TOP_RIGHT = LEFT_TOP << 1 ;
	
    public static final int RIGHT_BOTTON = LEFT_TOP << 2;
    
    public static final int BOTTON_LEFT = LEFT_TOP << 3 ;
}
 
大概测了测应该效果还可以,没细测。欢迎大家指出代码不对地方共同进步。 
运行效果:
 效果预览
  • 大小: 64.4 KB
分享到:
评论

相关推荐

    java swing绘制正弦曲线

    在这个场景中,我们讨论的是如何使用Java Swing来绘制正弦曲线,这对于理解和掌握图形绘制以及数学与编程的结合非常有帮助。下面将详细阐述这个话题。 首先,Java Swing中的`javax.swing.JFrame`是所有窗口的基础,...

    Java GUI 绘制出三角形

    本篇将重点讲解如何在Java GUI中绘制出一个三角形,这涉及到Java的AWT和Swing库。 首先,Java中的`java.awt.Graphics`类提供了基本的绘图功能,它允许我们在组件上绘制各种形状。为了在GUI中绘制三角形,我们需要...

    java swing漂亮界面(超酷) javaswing教程

    Java Swing 是Java编程语言中用于构建桌面应用程序用户界面的一个库,它是Java Foundation Classes (JFC) 的一部分。Swing 提供了一系列组件,如按钮、文本框、菜单等,用于创建功能丰富的图形用户界面(GUI)。在...

    java swing漂亮界面 超酷 javaswing教程

    Java AWT中的Graphics类和Swing中的JComponent类结合使用,可以让开发者直接在组件上绘制图形,实现个性化的设计。 在“Java Swing教程”中,我们会详细讲解如何使用这些组件、布局管理器、事件处理和外观定制,...

    JavaSwing 绘制折现图用到的jar包免费下载,需要自取

    包含 旧版本 gnujaxp.jar jcommon-1.0.13.jar jfreechart-1.0.10-experimental.jar jfreechart-1.0.10-swt.jar swtgraphics2d.jar junit.jar 新版本 jcommon-1.0.23.jar jfreechart-1.0.19.jar ...

    javaSwing皮肤大全.rar

    在Java Swing中,LookAndFeel是一种设计模式,用于实现组件的绘制方式,包括颜色、字体、布局和动画效果。 标题“javaSwing皮肤大全.rar”表明这是一个包含多种Swing LookAndFeel皮肤的压缩文件集合。这个压缩包...

    java+swing漂亮软件界面+超酷+以及javaswing教程.7z

    Java Swing 是Java平台上用于构建图形用户界面(GUI)的一个库,它是Java Foundation Classes (JFC)的一部分。在Java中,Swing提供了丰富的组件集,允许开发者创建美观且功能强大的桌面应用程序。"java+swing漂亮...

    基于Java Swing + MySQL的图书管理系统,优秀Java毕业设计系统,小白必看!

    基于Java Swing + MySQL的图书管理系统,优秀Java毕业设计系统,小白必看! 基于Java Swing + MySQL的图书管理系统,优秀Java毕业设计系统,小白必看! 基于Java Swing + MySQL的图书管理系统,优秀Java毕业设计系统...

    JavaSwing图形界面开发与案例详解源代码

    Java Swing是目前图形界面设计的主流开发工具,《Java Swing图形界面开发与案例详解[1]》从实用的角度出发,通过大量实例全面介绍Java Swing中各种组件的应用及图形界面的开发技术。《Java Swing图形界面开发与案例...

    基于Java Swing的物业管理系统源码+数据库(95分以上课程设计).zip

    基于Java Swing的物业管理系统源码+数据库(95分以上课程设计).zip 已获高分通过项目,代码完整下载即用,无需修改确保可以运行。 基于Java Swing的物业管理系统源码+数据库(95分以上课程设计).zip 已获高分...

    Java swing画随机圆

    在“Java Swing画随机圆”这个题目中,学生被要求利用Java Swing库来创建一个程序,该程序能够在屏幕上动态地绘制出大小、颜色和位置都随机的圆形。这涉及到Java编程基础、Swing组件的使用以及随机数生成的知识点。 ...

    (java swing毕业设计)学生信息管理(文档+视频+源码).zip

    (java swing毕业设计)学生信息管理(文档+视频+源码)(java swing毕业设计)学生信息管理(文档+视频+源码)(java swing毕业设计)学生信息管理(文档+视频+源码)(java swing毕业设计)学生信息管理(文档+视频+源码)(java ...

    基于java swing实现答题系统

    基于Java Swing实现答题系统的技术要点 本文将详细介绍基于Java Swing实现答题系统的技术要点,涵盖了GUI设计、事件处理、swing组件使用、Java图形化编程等多个方面的知识点。 一、GUI设计 在本文中,我们使用了...

    java Swing多Jpanel动态滑动切换效果

    java Swing多Jpanel仿安卓苹果桌面动态切换滑动效果

    javaswing教程 精通javaswing

    "Java Swing 教程精通 Java Swing" Java Swing 是 Java 平台的 UI 组件库,提供了处理用户和计算机之间全部交互的软件。它提供了处理键盘、颜色、打字的地址栏、音量等 UI 各方面内容的机制。Swing 的角色是充当...

    java swing 多功能 聊天室

    Java Swing 是Java平台上用于构建图形用户界面(GUI)的一个库,它是Java Foundation Classes (JFC) 的一部分。在本项目“java swing 多功能 聊天室”中,开发者利用Swing构建了一个具备多种功能的聊天应用,包括...

    java 根据三条边判断三角形的类型,并绘制出三角形

    3. **绘制三角形**:可以使用Java的图形库,例如Java AWT或Swing来绘制三角形。这通常涉及到定义坐标系统,计算顶点坐标,然后使用线段连接这些点。 以下是一个简单的`Triangle`类示例: ```java public class ...

    基于java swing的学生信息管理系统.zip

    《基于Java Swing的学生信息管理系统详解》 Java Swing是Java Standard Edition (Java SE)的一部分,它提供了一套丰富的用户界面组件,用于构建桌面应用程序。在这个基于Java Swing的学生信息管理系统中,开发者...

    (java swing毕业设计)酒店管理系统(ppt+ER图+流程图+需求背景数据库+架构说明有lun文视频源码齐全).zip

    (java swing毕业设计)酒店管理系统(ppt+ER图+流程图+需求背景数据库+架构说明有lun文视频源码齐全)(java swing毕业设计)酒店管理系统(ppt+ER图+流程图+需求背景数据库+架构说明有lun文视频源码齐全)(java swing毕业...

Global site tag (gtag.js) - Google Analytics