Java Swing 中的表格问题

问题描述

先看代码:importjava.awt.BorderLayout;importjava.awt.Color;importjava.awt.Component;importjava.awt.EventQueue;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.WindowAdapter;importjava.awt.event.WindowEvent;importjava.util.EventObject;importjavax.swing.AbstractCellEditor;importjavax.swing.DefaultCellEditor;importjavax.swing.ImageIcon;importjavax.swing.JColorChooser;importjavax.swing.JComboBox;importjavax.swing.JDialog;importjavax.swing.JFrame;importjavax.swing.JPanel;importjavax.swing.JScrollPane;importjavax.swing.JTable;importjavax.swing.UIManager;importjavax.swing.table.AbstractTableModel;importjavax.swing.table.TableCellEditor;importjavax.swing.table.TableCellRenderer;importjavax.swing.table.TableColumn;importjavax.swing.table.TableColumnModel;importjavax.swing.table.TableModel;publicclassTableCellRenderTest{/***@paramargs*/publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubtry{UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");}catch(Throwablee){e.printStackTrace();}EventQueue.invokeLater(newRunnable(){@Overridepublicvoidrun(){//TODOAuto-generatedmethodstubJFrameframe=newTableCellRenderFrame();frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);}});}}classTableCellRenderFrameextendsJFrame{privatestaticfinallongserialVersionUID=2017007572540121699L;publicTableCellRenderFrame(){setTitle("TableCellRenderTest");setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);TableModelmodel=newPlanetTableModel();JTabletable=newJTable(model);table.setRowSelectionAllowed(false);//setuprenderersandeditorstable.setDefaultRenderer(Color.class,newColorTableCellRenderer());table.setDefaultEditor(Color.class,newColorTableCellEditor());JComboBox<Integer>moonCombo=newJComboBox<Integer>();for(inti=0;i<=20;i++){moonCombo.addItem(i);}//获取列视图TableColumnModelcolumnModel=table.getColumnModel();TableColumnmoonColumn=columnModel.getColumn(PlanetTableModel.MOONS_COLUMN);moonColumn.setCellEditor(newDefaultCellEditor(moonCombo));moonColumn.setHeaderRenderer(table.getDefaultRenderer(ImageIcon.class));moonColumn.setHeaderValue(newImageIcon("images/6.jpg"));//showtabletable.setRowHeight(100);add(newJScrollPane(table),BorderLayout.CENTER);}privatestaticfinalintDEFAULT_WIDTH=600;privatestaticfinalintDEFAULT_HEIGHT=400;}/**Theplanettablemodelspecifiesthevalue,renderingandeditingproperties*fortheplanetdata.*/classPlanetTableModelextendsAbstractTableModel{privatestaticfinallongserialVersionUID=-6525995252603866044L;//返回列数@OverridepublicintgetColumnCount(){//TODOAuto-generatedmethodstubreturncells[0].length;}//返回行数@OverridepublicintgetRowCount(){//TODOAuto-generatedmethodstubreturncells.length;}@OverridepublicObjectgetValueAt(intr,intc){//TODOAuto-generatedmethodstubreturncells[r][c];}publicStringgetColumnName(intc){returncolumnsName[c];}publicClass<?>getColumnClass(intc){returncells[0][c].getClass();}publicvoidsetValueAt(Objectobj,intr,intc){cells[r][c]=obj;}publicbooleanisCellEditable(intr,intc){returnc==PLANET_COLUMN||c==MOONS_COLUMN||c==GASEOUS_COLUMN||c==COLOR_COLUMN;}publicstaticfinalintPLANET_COLUMN=0;publicstaticfinalintMOONS_COLUMN=2;publicstaticfinalintGASEOUS_COLUMN=3;publicstaticfinalintCOLOR_COLUMN=4;privateObject[][]cells={{"Mercury",2440.0,0,false,Color.yellow,newImageIcon("images/7.jgp")},{"Venus",6052.0,0,false,Color.YELLOW,newImageIcon("images/8.jpg")},{"Earth",6378.0,0,false,Color.BLUE,newImageIcon("images/9.jpg")},{"Mars",3397.0,0,false,Color.RED,newImageIcon("images/10.jpg")},{"Jupiter",71492.0,false,Color.ORANGE,newImageIcon("images/11.jpg")},{"Saturn",60268.0,0,false,Color.ORANGE,newImageIcon("images/12.jpg")},{"Uranus",25559.0,0,false,Color.BLUE,newImageIcon("images/13.jpg")},{"Neptune",24766.0,0,false,Color.BLUE,newImageIcon("images/14.jpg")},{"Pluto",1137.0,1,false,Color.BLACK,newImageIcon("images/15.jpg")}};privateString[]columnsName={"Planet","Radius","Moons","Gaseous","Color","Image"};}/**Thisrendererrendersacolorvalueasapanelwiththegivencolor.*/classColorTableCellRendererextendsJPanelimplementsTableCellRenderer{privatestaticfinallongserialVersionUID=851890999617120783L;@OverridepublicComponentgetTableCellRendererComponent(JTabletable,Objectvalue,booleanisSelected,booleanhasFocus,introw,intcolumn){//TODOAuto-generatedmethodstubsetBackground((Color)value);if(hasFocus)setBorder(UIManager.getBorder("Table.focusCellHighlightBorder"));elsesetBorder(null);returnthis;}}/**Thiseditorpopsupacolordialogtoeditacellvalue*/classColorTableCellEditorextendsAbstractCellEditorimplementsTableCellEditor{privatestaticfinallongserialVersionUID=-5021717417421372502L;//构造器publicColorTableCellEditor(){panel=newJPanel();//preparecolordialog/**publicstaticJDialogcreateDialog(Componentc,Stringtitle,boolean*modal,JColorChoosercolorChooser,ActionLisntener*okListener,ActionListenercancelListener);**@paramc对话框的父组件**@paramtitle对话框的标题**@parammodal为true时,在关闭对话框之前,程序的剩余部分将一直处于非激活状态**@paramcolorChooser要置于对话框中的颜色选择器**@paramokListener按下"OK"时调用的ActionListener**@paramcalcelListener按下"Cancel"时调用的ActionListener*/colorChooser=newJColorChooser();colorDialog=JColorChooser.createDialog(null,"PlanetColor",false,colorChooser,newActionListener(){@OverridepublicvoidactionPerformed(ActionEventevent){//TODOAuto-generatedmethodstubstopCellEditing();}},newActionListener(){@OverridepublicvoidactionPerformed(ActionEventevent){//TODOAuto-generatedmethodstubcancelCellEditing();}});colorDialog.addWindowListener(newWindowAdapter(){@OverridepublicvoidwindowClosing(WindowEventarg0){//TODOAuto-generatedmethodstubcancelCellEditing();}});}@OverridepublicObjectgetCellEditorValue(){//TODOAuto-generatedmethodstubreturncolorChooser.getColor();}/**ComponentgetTableCellEditorComponent(JTabletable,Objectvalue,boolean*isSelected,introw,intcolumn)*/@OverridepublicComponentgetTableCellEditorComponent(JTabletable,Objectvalue,booleanisSelected,introw,intcolumn){//TODOAuto-generatedmethodstub//thisiswherewegetthecurrentColorvalue,Westoreitinthe//dialogincase//theuserstartseditingcolorChooser.setColor((Color)value);returnpanel;}publicbooleanshouldSelectCell(EventObjectanEvent){//starteditingcolorChooser.setVisible(true);//tellcalleritisoktoselectthiscellreturntrue;}//告知编辑器取消编辑并且不接受任何已部分编辑的值。publicvoidcancelCellEditing(){//editingiscanceled--hidedialogcolorDialog.setVisible(false);super.cancelCellEditing();}//告知编辑器停止编辑并接受任何已部分编辑的值作为编辑器的值。//如果编辑没有停止,则编辑器返回false;这对已生效并且无法接受无效条目的编辑器很有用。publicbooleanstopCellEditing(){//editingiscomplete--hidedialogcolorDialog.setVisible(false);super.stopCellEditing();//tellcalleritisoktousecolorvaluereturntrue;}privateJColorChoosercolorChooser;privateJDialogcolorDialog;privateJPanelpanel;}

运行截图:问题:当下拉滚动条时出现了错误,看Console截图:

解决方案

时间: 2024-09-19 01:57:13

Java Swing 中的表格问题的相关文章

Java Swing中的表格(JTable)和树(JTree)组件使用实例_java

一:表格(JTable): 1.基本概念: 表格(JTable)是Swing 新增加的组件,主要是为了将数据以表格的形式显示.给显示大块数据提供了简单的机制. 2.常用构造方法:  * JTable():使用系统默认的模型创建一个JTable 实例.  * JTable(int numRows,int numColumns):创建一个使用DefaultTableModel 指定行.列的空表格.  * JTable(Object[ ][ ] rowData,Object[ ][ ] columnN

Java Swing中两种设置背景图(容器图片)

在java swing中需要为容器添加图片,或者背景图片. 提供两种简单的解决方案,一种利用JPanel,另一种利用JLabel 1.JPanel(源代码) [java] view plaincopy package oo;      import java.awt.Graphics;   import java.awt.Image;   import java.io.File;      import javax.swing.ImageIcon;   import javax.swing.JF

java swing中如何为一个窗体添加背景图片

问题描述 java swing中如何为一个窗体添加背景图片 java swing中如何为一个窗体添加背景图片,java swing中如何为一个窗体添加背景图片 解决方案 http://blog.csdn.net/caixiexin/article/details/6608919 解决方案二: 在JFrame中添加JPanel面板,然后就可以设置了.

关于Java Swing中的repaint()方法及setVisible()的问题

问题描述 关于Java Swing中的repaint()方法及setVisible()的问题 我写了一个JFrame, 加了一个JComponent,进行一些处理后使用removeAll()移除了JComponent中的所有组件,然后调用add(JPanel)添加了一个新的组件,最后调用repaint()方法显示这个JPanel 这时发现JPanel无法显示,但调整窗口大小后就能显示 因为调整窗口大小不是会自动调用repaint()方法吗?但是我自己调用了啊为什么不会显示嘞. 接下来, 我在re

按钮-自己参照书本写了一个Java Swing中的容器类入门程序设计,但是运行结果不对,求大神帮帮忙!

问题描述 自己参照书本写了一个Java Swing中的容器类入门程序设计,但是运行结果不对,求大神帮帮忙! /*题目是这样的:创建一个窗体在其中摆放两个内容面板对两个面板进行边框个性化设置.初始状态为第二个面板不可见,当单击第一个面板中的"打开"按钮时,第二个面板即可见:当单击第一个面板中的"关闭"按钮时,第二个面板消失. 以下是我结合书本写的代码,不知道为什么运行不了???*/import javax.swing.*;import java.awt.*;impor

Java swing中Jlist怎么判断里面是否有数据?谢谢

问题描述 Java swing中Jlist怎么判断里面是否有数据?谢谢 因为布局需要,所有我在开始就new了: private DefaultListModel<String> listModel = new DefaultListModel<>();private JList<String> buttonList = new JList<>(listModel); 中间是监听数字按钮,并动态的将按钮上的值放入buttonList. 最后要监听一个MC按钮,

java swing 中事件处理读取参数问题

问题描述 java swing 中事件处理读取参数问题 在MyFrame类中有一个static double[][]二维数组,添加button按钮事件生成一新的类似于Excel窗口,输入数据并存入MyFrame的静态数组中.但是在MyFrame中读取这个数组时总是不能正确地读出输入的数据,而是未初始化时的空数组.请问这是什么问题?应该怎么读呢.

java swing中drawline方法,界面最小化之后线消失的问题

问题描述 java swing中drawline方法,界面最小化之后线消失的问题 我通过Graphics g=getGraphics(); g.setColor(Color.RED); g.drawLine(0,0,100,100); 画线,在点击某个按钮的时候在面板之中动态的画线,但是这样界面最小化之后,刚才画的线就不见了,应该怎么办呢? 解决方案 你的drawLine应该是在按钮响应函数里面写的吧.这时候绘出的图像会在系统重绘时抹去.比如你最小化以后再还原,系统窗口会自动重绘.系统会首先清空

java swing中怎么让面板的背景图片缩放

问题描述 java swing中怎么让面板的背景图片缩放 public void paintComponent(Graphics g){ Graphics2D g2 = (Graphics2D) g; super.paintComponent(g2); //背景图片 int x=0,y=0; java.net.URL imgURL=getClass().getResource("t0156b516cea6edd501.jpg"); ImageIcon icon=new ImageIco