`
lg_asus
  • 浏览: 191869 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

JTble模式與配色

阅读更多
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;

public class JTableDemo4 implements ActionListener{
	
	JTable table = null;
	JButton button1,button2;
	
	public JTableDemo4(){
		JFrame jf = new JFrame();
		button1 = new JButton("數學老師");
		button1.addActionListener(this);
		button2 = new JButton("學生阿呆");
		button2.addActionListener(this);
		JPanel panel = new JPanel();
		panel.add(button1);
		panel.add(button2);
		table = new JTable(new MyTableModel(2));
		table.setPreferredScrollableViewportSize(new Dimension(500,300));
//		table.getColumnModel().getColumn(2).setCellEditor(new DefaultCellEditor(new JCheckBox()));
		//設置行列的選擇模式
		table.setColumnSelectionAllowed(true);
		table.setRowSelectionAllowed(true);
//		設置單元格選取時的顏色變化
		table.setSelectionBackground(Color.yellow);
		table.setSelectionForeground(Color.red);
		JScrollPane scrollPane = new JScrollPane(table);
		scrollPane.getViewport().setBackground(Color.white);
		paintCell();
		
		jf.getContentPane().add(panel,BorderLayout.NORTH);
		jf.getContentPane().add(scrollPane,BorderLayout.CENTER);
		jf.pack();
		jf.setVisible(true);
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
	}
	public static void main(String...args){
		new JTableDemo4();
	}
	
	public void paintCell(){
		for(int i=0;i<table.getColumnCount();i++){
			table.getColumn(table.getColumnName(i)).setCellRenderer(new MyTableRenderer());
		}
	}
	
	@Override
	public void actionPerformed(ActionEvent e){
		if(e.getSource()==button1){
			table.setModel(new MyTableModel(2));
		}
		if(e.getSource()==button2){
			table.setModel(new MyTableModel(1));
		}
		paintCell();
//		System.out.println(table.getColumn("及格").getClass());
		table.revalidate();
	}
}


class MyTableModel extends AbstractTableModel{
	Object[][] p1 = {
			{"阿呆",new Integer(78),new Boolean(true)}
	};
	String[] n1 = {"姓名","成績","及格"};
	Object[][] p2 = {
			{"阿瓜",new Integer(58),new Boolean(false)},
			{"阿呆",new Integer(78),new Boolean(true)}
	};
	//String[] n2 = {"姓名","成績","及格"};
	//mode為1表示角色為阿呆,為2則表示角色為老師
	int mode = 2;
	public MyTableModel(int i){
		mode = i;
	}
	@Override
	public int getColumnCount(){
		if(mode==1){
			return n1.length;
		}
		else{
			return n1.length;
		}
	}
	@Override
	public int getRowCount(){
		if(mode==1){
			return p1.length;
		}else{
			return p2.length;
		}
	}
	@Override
	public Object getValueAt(int row,int col){
		if(mode==1){
			return p1[row][col];
		}else{
			return p2[row][col];
		}
	}
	@Override
	public String getColumnName(int col){
		if(mode==1){
			return n1[col];
		}else{
			return n1[col];
		}
	}
	@Override
	public Class getColumnClass(int col){
		//if(col==3) return Boolean.class;
		//else
		return getValueAt(0,col).getClass();
		
	}
	@Override
	public boolean isCellEditable(int row,int col){
		return true;
	}
}

class MyTableRenderer extends DefaultTableCellRenderer{
	@Override
	public Component getTableCellRendererComponent(JTable table, Object value,
			boolean isSelected, boolean hasFocus, int row, int column) {
		if(value!=null){
			switch(row%2){
				case 0:
					setBackground(Color.cyan);
					//setForeground(Color.black);
					break;
				case 1:
					setBackground(Color.pink);
					//setForeground(Color.black);
					break;
				default:
					setBackground(Color.yellow);
					break;
			}
			if(value instanceof Boolean){
				JCheckBox jck =new JCheckBox();
				jck.setSelected(Boolean.parseBoolean(value.toString()));
				jck.setHorizontalAlignment(JCheckBox.CENTER);
				return jck;
			}
			if(value instanceof String){
				super.setHorizontalAlignment(super.LEFT);
			}
			if(value instanceof Integer){
				super.setHorizontalAlignment(super.RIGHT);
			}
			
			if(isSelected){
//				為什么在這里設定選取單元格的顏色變化沒有效果呢?
				System.out.println(row+" "+column+"被選中");
				//this.setForeground(Color.yellow);
			}
			else{
				//this.setBackground(new Color(200,100,100));
				//this.setForeground(Color.red);
				//setBackground(Color.blue);
			}
			if(hasFocus){
				//System.out.println(row+" "+column+"獲得焦點");
			}else{
//				System.out.println(row+" "+column+"失去焦點");
			}
		}
		return   super.getTableCellRendererComponent(table,   value,isSelected,   hasFocus,   row,   column);
	}
	
}


參考:深入淺出Java Swing程序設計

補充:想要實現單元格可更改,應該重寫isCellEidtable()和setValueAt()方法

public boolean isCellEditable(int row,int col){
   return true;
}

public void setValueAt(Object value,int row,int col){
   p[row][col] = value;
   fireTableCellUpdated(row,col);//通知系統表格已經作為更改,注釋掉也沒有影響
}
分享到:
评论

相关推荐

    keil配色 护眼模式启动

    keil配色 护眼模式启动 keil配色 护眼模式启动 keil配色 护眼模式启动 keil配色 护眼模式启动 keil配色 护眼模式启动 keil配色 护眼模式启动 keil配色 护眼模式启动 keil配色 护眼模式启动 keil配色 护眼模式启动 ...

    网页版式设计与配色技巧系列视频课程

    教程名称:网页版式设计与配色技巧系列视频课程课程目录:【】网页版式设计与配色技巧(8day)第八天【】网页版式设计与配色技巧第一天【】网页版式设计与配色技巧第七天【】网页版式设计与配色技巧第三天【】网页版式...

    Keil MDK5 暗黑配色方案第3版,修改TXT文件的配色,重启生效

    这款IDE支持多种语言,包括C和C++,并且允许用户自定义配色方案以满足个人喜好和视觉舒适度。 本资源提供的“Keil MDK5 暗黑配色方案第3版”是针对μVision IDE进行的个性化设置,旨在为开发者提供一个更加护眼的...

    SecureCRT 配色方案.rar

    此外,这种配色方案还可能包括夜间模式或者暗色主题,以适应在低光环境下使用的情况。 为了应用这些配色方案,用户需要在SecureCRT软件中进行设置。通常步骤如下: 1. 打开SecureCRT,进入“Options”(选项)菜单...

    QtCreator 配色方案 VS2010风格

    此外,为了获得更全面的VS2010体验,用户还可以考虑调整Qt Creator的主题和布局,使其与Visual Studio 2010的窗口样式和菜单布局保持一致。这可能涉及到调整工具栏的位置、窗口分割方式,甚至是快捷键设置。 总之,...

    实用着色与配色技术

    实用着色与配色技术 本书从颜色的基本知识着手介绍有关测色与配方的理论,颜色的测量、 计算机配色的原理与应用,在不同基质材料上着色与配色

    网页设计与配色(书名就这么短)

    网页设计与配色是网页制作过程中的核心环节,它直接影响着用户的视觉体验和网站的整体感觉。配色不仅仅是选择几种颜色那么简单,而是涉及到色彩心理学、视觉平衡、对比度、调和原则等多个方面。以下是对这个主题的...

    MDK,keil编译环境配色方案+配色软件

    总的来说,MDK的Keil编译环境配色方案与配色软件为开发者提供了一个更个性化的编程环境,通过自动化工具可以轻松调整和恢复配色,提升了开发者的编程体验。对于初次接触Keil μVision或希望改善工作环境的开发者来说...

    通达信护眼配色方案

    例如,常见的界面调整包括使用低对比度配色方案,用更为柔和的色彩来替代刺眼的高对比度色彩,如将标准的白底黑字改为淡黄色背景与深灰色文字,以减少对视觉系统的冲击,帮助用户的眼睛在长时间使用后仍能保持舒适...

    Source Insight 配色方案

    - **夜间模式**:如果经常在暗光环境下工作,可以创建一个低亮度的夜间模式配色方案。 4. **预设配色方案的使用** - **下载**:可以从网上找到许多社区分享的Source Insight配色方案,这些通常以`.prf`文件形式...

    SecureCRT配色方案导入.rar

    标签中的"优秀的配色方案导入"意味着这份压缩包提供的不仅仅是普通的配色,而是经过精心挑选或设计的高质量方案,可能包括了流行的色彩搭配,如暗黑模式、亮色模式或者模仿知名编辑器(如VS Code、Sublime Text)的...

    xshell非常舒服的配色方案

    这款"很舒服的配色方案"注重色彩的层次感与对比度,使得代码和命令行元素更加清晰可读,同时避免过于刺眼的色彩,确保在长时间使用后,眼睛仍能保持相对舒适的状态。 在实际应用中,我们可以根据个人喜好和工作环境...

    400多套matlab绘图配色方案-othercolor配色工具包

    "400多套matlab绘图配色方案-othercolor配色工具包"正是为了解决这个问题,提供丰富的颜色搭配选择,帮助用户提升MATLAB绘图的美观度和专业性。 MATLAB绘图配色方案通常包含一系列的颜色代码,这些代码可以是RGB...

    Keil MDK 5护眼绿色配色方案

    这个是Keil MDK 5软件里的配色方案文件,可以把这个文件直接复制到Keil MDK 5软件的根目录下,替换原本的文件,就可以快速更改软件配色方案了。该配色文件只修改了软件中显示的背景为护眼绿色,其他没有修改。具体...

    网站设计与网页配色 北京市:科学出版社 王爽,徐仕猛,张晶著 .pdf

    网站设计与网页配色是现代网络信息时代的重要组成部分,它不仅关系到网站的美观程度,还影响着用户体验和信息传递的效果。本书《网站设计与网页配色》由王爽、徐仕猛、张晶三人共同编著,由科学出版社出版,详细地...

    [原创]FC背景与配色.zip

    【FC背景与配色】是针对经典游戏平台Family Computer(简称FC,又称Nintendo Entertainment System,NES)中的图形设计原理进行的探讨。FC是1980年代末至1990年代初流行的家用游戏机,它的图形处理能力有限,但通过...

    SuperMap地图配色策略与技巧

    SuperMap地图配色策略与技巧 SuperMap地图配色策略与技巧是指在使用SuperMap软件进行地图制作时,对地图的配色进行策略性和技巧性的设计和实现。该技术涉及到多个方面,包括地图配色的原则、地图配色的策略、在...

    keil配色文件与更改配色方法

    本文将详细讲解如何在Keil集成开发环境中配置与VS Code相似的"TomorrowNightBlue"深色配色方案。 Keil μVision是一款广泛使用的嵌入式系统开发工具,它支持多种微控制器的编程。默认的配色方案可能并不符合每个人...

    网页设计配色方案(配色方案、配色原则、CSS代码生成器)

    网页设计配色方案是网页制作中的重要一环,它直接影响着网站的整体视觉效果和用户体验。在设计网页时,选择合适的配色方案能够有效地传达品牌信息,吸引用户注意力,并且营造出舒适、和谐的浏览环境。以下是一些关于...

    易语言代码配色方案

    这种配色方案可能选取了低对比度的颜色组合,同时兼顾了文字与背景的清晰对比度,从而减轻了长时间阅读代码对眼睛的压力。 应用“蚂蚁软件配色方案”相当简单,只需将.clr文件导入易语言的IDE中,然后在设置或选项...

Global site tag (gtag.js) - Google Analytics