大佬教程收集整理的这篇文章主要介绍了Java Swing,尝试用图像图标复选框替换JTable中的布尔复选框,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
您需要提供自己的自定义tableCellRenderer功能,该功能能够提供所需的功能…
import java.awt.borderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JcheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JscrollPane;
import javax.swing.Jtable;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.table.AbstracttableModel;
import javax.swing.table.tableCellRenderer;
import javax.swing.table.tableModel;
public class TesttableRenderer {
public static voID main(String[] args) {
new TesttableRenderer();
}
public TesttableRenderer() {
EventQueue.invokelater(new Runnable() {
@OverrIDe
public voID run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassname());
} catch (ClassnotFoundException | InstantiationException | illegalaccessexception | UnsupportedLookAndFeelException eX) {
}
JFrame frame = new JFrame("TesTing");
frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new borderLayout());
frame.add(new TestPane());
frame.pack();
frame.setLOCATIOnrelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
public TestPane() {
tableModel model = new AbstracttableModel() {
@OverrIDe
public int getRowCount() {
return 2;
}
@OverrIDe
public int getcolumnCount() {
return 1;
}
@OverrIDe
public Object getValueAt(int rowIndex, int columnIndeX) {
return rowIndex == 0 ? true : false;
}
@OverrIDe
public Class<?> getcolumnClass(int columnIndeX) {
return Boolean.class;
}
};
Jtable table = new Jtable(model);
table.setDefaultRenderer(Boolean.class, new CustomBooleanCellRenderer());
setLayout(new borderLayout());
add(new JscrollPane(tablE));
}
@OverrIDe
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
}
public class CustomBooleanCellRenderer extends JcheckBox implements tableCellRenderer {
private ImageIcon sad;
private ImageIcon happy;
public CustomBooleanCellRenderer() {
try {
happy = new ImageIcon(ImageIO.read(getClass().get@R_674_5550@e("/Happy.png")));
sad = new ImageIcon(ImageIO.read(getClass().get@R_674_5550@e("/Sad.png")));
} catch (IOException eX) {
Logger.getLogger(TesttableRenderer.class.getname()).log(Level.SEVERE, null, eX);
}
}
@OverrIDe
public voID setSELEcted(Boolean SELEcted) {
super.setSELEcted(SELEcted);
if (SELEcted) {
setIcon(happy);
} else {
setIcon(sad);
}
}
@OverrIDe
public Component gettableCellRendererComponent(Jtable table, Object value, Boolean isSELEcted, Boolean hasFocus, int row, int column) {
if (value instanceof Boolean) {
Boolean SELEcted = (Boolean) value;
setSELEcted(SELEcted);
}
return this;
}
}
}
现在,您可以轻松地使用aJLabel或DefaulttableCellRenderer, 检查/的Object值并相应地设置图标……但 这样做的乐趣何在?)truefalse
已更新,包括编辑器…
我已经稍微重新排列了代码,以包括单元格编辑器…
public class CustomcatheckBox extends JcheckBox {
private ImageIcon sad;
private ImageIcon happy;
public CustomcatheckBox() {
try {
happy = new ImageIcon(ImageIO.read(getClass().get@R_674_5550@e("/Happy.png")));
sad = new ImageIcon(ImageIO.read(getClass().get@R_674_5550@e("/Sad.png")));
} catch (IOException eX) {
ex.printstacktrace();
}
}
@OverrIDe
public voID setSELEcted(Boolean SELEcted) {
super.setSELEcted(SELEcted);
if (SELEcted) {
setIcon(happy);
} else {
setIcon(sad);
}
}
}
public class CustomBooleanCellRenderer extends CustomcatheckBox implements tableCellRenderer {
@OverrIDe
public Component gettableCellRendererComponent(Jtable table, Object value, Boolean isSELEcted, Boolean hasFocus, int row, int column) {
if (value instanceof Boolean) {
Boolean SELEcted = (Boolean) value;
setSELEcted(SELEcted);
}
return this;
}
}
public class CustomBooleanCellEditor extends AbstractCellEditor implements tableCellEditor {
private CustomcatheckBox editor;
public CustomBooleanCellEditor() {
editor = new CustomcatheckBox();
}
@OverrIDe
public Component gettableCellEditorComponent(Jtable table, Object value, Boolean isSELEcted, int row, int column) {
if (value instanceof Boolean) {
Boolean SELEcted = (Boolean) value;
editor.setSELEcted(SELEcted);
}
return editor;
}
@OverrIDe
public Object getCellEditorValue() {
return editor.isSELEcted();
}
}
You can apply the in a similar way you dID the renderer…
table.setDefaultEditor(Boolean.class, new CustomBooleanCellEditor());
所以我有一个带有复选框的JTable。我想让复选框
在“选中”时包含一个图像,而在“未选中”时包含另一个图像
(即,显示图像而不是选中或未选中的框)。是否
有办法做到这一点?我试着用TableCellRenderer愚弄它
返回带有ImageIcon的JLabel,但是它并不是非常有效。
更具体地说,当复选框处于选中状态或未选中状态时,右侧的图像
就会出现,但是当用户更改复选框状态(鼠标处于
按下状态)时,将显示原始选中/未选中的图像
这是我尝试过的TableCellRenderer(我也使用JPanels尝试过,但这
同样无效
public class CrassusEventTableCellEyeRenderer extends JcheckBox implements TableCellRenderer {
static Icon greyEye;
static Icon blackEye;
{//STATIC CODE BLOCK
try {
greyEye = new ImageIcon(ImageIO.read(new File("icons/shittyTest.png")));
blackEye = new ImageIcon(ImageIO.read(new File("icons/blackEye.png")));
} catch (IOException E) {
greyEye = null;
blackEye = null;
}
}
public CrassusEventTableCellEyeRenderer(){
super();
this.addItemListener(new IscheckedItemListener());
setIcon(greyEyE);
}
//commented out code that I have tried in place of the IscheckedItemListener
/*
@Override
public void setSELEcted(Boolean sel){
super.isSELEcted();
if(sel)
setIcon(blackEyE);
else
setIcon(greyEyE);
}
*/
public class IscheckedItemListener implements ItemListener{
@Override
public void itemStateChanged(ItemEvent E) {
if(isSELEcted())
setIcon(blackEyE);
else
setIcon(greyEyE);
}
}
@Override
public Component getTableCellRendererComponent(JTable table,Object value,Boolean isSELEcted,Boolean hasFocus,int row,int column) {
System.out.println("value: "+value+",row: "+row+",column: "+column);
if(value instanceof Boolean){
setSELEcted(((Boolean) value).BooleanValue());
}
return this;
}
}
以上是大佬教程为你收集整理的Java Swing,尝试用图像图标复选框替换JTable中的布尔复选框全部内容,希望文章能够帮你解决Java Swing,尝试用图像图标复选框替换JTable中的布尔复选框所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。