今天收到一家公司面试题目,大致要求是:
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中的`javax.swing.JFrame`是所有窗口的基础,...
本篇将重点讲解如何在Java GUI中绘制出一个三角形,这涉及到Java的AWT和Swing库。 首先,Java中的`java.awt.Graphics`类提供了基本的绘图功能,它允许我们在组件上绘制各种形状。为了在GUI中绘制三角形,我们需要...
Java Swing 是Java编程语言中用于构建桌面应用程序用户界面的一个库,它是Java Foundation Classes (JFC) 的一部分。Swing 提供了一系列组件,如按钮、文本框、菜单等,用于创建功能丰富的图形用户界面(GUI)。在...
Java AWT中的Graphics类和Swing中的JComponent类结合使用,可以让开发者直接在组件上绘制图形,实现个性化的设计。 在“Java Swing教程”中,我们会详细讲解如何使用这些组件、布局管理器、事件处理和外观定制,...
包含 旧版本 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 ...
在Java Swing中,LookAndFeel是一种设计模式,用于实现组件的绘制方式,包括颜色、字体、布局和动画效果。 标题“javaSwing皮肤大全.rar”表明这是一个包含多种Swing LookAndFeel皮肤的压缩文件集合。这个压缩包...
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是目前图形界面设计的主流开发工具,《Java Swing图形界面开发与案例详解[1]》从实用的角度出发,通过大量实例全面介绍Java Swing中各种组件的应用及图形界面的开发技术。《Java Swing图形界面开发与案例...
基于Java Swing的物业管理系统源码+数据库(95分以上课程设计).zip 已获高分通过项目,代码完整下载即用,无需修改确保可以运行。 基于Java Swing的物业管理系统源码+数据库(95分以上课程设计).zip 已获高分...
在“Java Swing画随机圆”这个题目中,学生被要求利用Java Swing库来创建一个程序,该程序能够在屏幕上动态地绘制出大小、颜色和位置都随机的圆形。这涉及到Java编程基础、Swing组件的使用以及随机数生成的知识点。 ...
(java swing毕业设计)学生信息管理(文档+视频+源码)(java swing毕业设计)学生信息管理(文档+视频+源码)(java swing毕业设计)学生信息管理(文档+视频+源码)(java swing毕业设计)学生信息管理(文档+视频+源码)(java ...
基于Java Swing实现答题系统的技术要点 本文将详细介绍基于Java Swing实现答题系统的技术要点,涵盖了GUI设计、事件处理、swing组件使用、Java图形化编程等多个方面的知识点。 一、GUI设计 在本文中,我们使用了...
java Swing多Jpanel仿安卓苹果桌面动态切换滑动效果
"Java Swing 教程精通 Java Swing" Java Swing 是 Java 平台的 UI 组件库,提供了处理用户和计算机之间全部交互的软件。它提供了处理键盘、颜色、打字的地址栏、音量等 UI 各方面内容的机制。Swing 的角色是充当...
Java Swing 是Java平台上用于构建图形用户界面(GUI)的一个库,它是Java Foundation Classes (JFC) 的一部分。在本项目“java swing 多功能 聊天室”中,开发者利用Swing构建了一个具备多种功能的聊天应用,包括...
3. **绘制三角形**:可以使用Java的图形库,例如Java AWT或Swing来绘制三角形。这通常涉及到定义坐标系统,计算顶点坐标,然后使用线段连接这些点。 以下是一个简单的`Triangle`类示例: ```java public class ...
《基于Java Swing的学生信息管理系统详解》 Java Swing是Java Standard Edition (Java SE)的一部分,它提供了一套丰富的用户界面组件,用于构建桌面应用程序。在这个基于Java Swing的学生信息管理系统中,开发者...
(java swing毕业设计)酒店管理系统(ppt+ER图+流程图+需求背景数据库+架构说明有lun文视频源码齐全)(java swing毕业设计)酒店管理系统(ppt+ER图+流程图+需求背景数据库+架构说明有lun文视频源码齐全)(java swing毕业...