如何为jtable固定列设置图像,当我运行时,它仅获取图像路径

发布于 2025-01-01 22:52:23 字数 2070 浏览 4 评论 0原文

我创建了一个程序来在 jtable 固定列中设置 imageIcon,我创建了一个 jtable 并获取数据库记录,然后将第一列设置为固定列。我在固定列中设置了一个图像图标。当我编译这个程序时,我只得到 imageicon 的路径,而不得到图像。我在项目包文件夹中修复了一个 imageIcon。

    This is the code i used

public void Frm_FlxD_Database() {
           try{
                TmpRow=0;
                TmpMainPrj.PRJ_DB_CONNECTION_ASSGN();
                TmpFlxMdl =(DefaultTableModel)FlxD.getModel();
                TmpFlxDRow = 0;

                TmpFlxSt=TmpGPrjVarDec.GContn.createStatement();
                TmpFlxDRs=TmpFlxSt.executeQuery("SELECT * from activitymaster");
                PRJ_FLX_DEFTL_ASSGN(FlxD, "BEGIN");
                TmpFlxDRs.first();
                do {
                    FlxD.setValueAt(TmpFlxDRs.getString("ACTVTYDESC"), TmpRow,1);
                    FlxD.setValueAt(TmpFlxDRs.getString("ACTVTYCODE"), TmpRow,2);
                    FlxD.setValueAt(TmpFlxDRs.getString("DISPSTATUS"), TmpRow,3);
                    FlxD.setValueAt(TmpFlxDRs.getString("ACTVTYID"), TmpRow,4);
                    TmpFlxMdl.addRow(new Object[]{""});
                    TmpRow = TmpRow + 1;
                }while(TmpFlxDRs.next());

                FRM_FLXD_PTR_DATA_ASSGN(TmpFlxDRow);
           }
           catch(Exception e){
                System.out.println(e);
           }
    }
private void FRM_FLXD_PTR_DATA_ASSGN(int PFlxRow) {
           TmpFlxDRow = PRJ_FLX_PTR_ASSGN(FlxD, PFlxRow, TmpFlxDRow);
   }

    private int PRJ_FLX_PTR_ASSGN(JTable PFlx, int PCurRow, int PPrvRow) {
            ImageIcon TmpIcon;

            System.out.println(PCurRow);
            System.out.println(PPrvRow);

            if (PCurRow != PPrvRow){
                TmpIcon = new ImageIcon(getClass().getResource("Blank.gif"));
                PFlx.setValueAt(TmpIcon,PPrvRow,0);
                System.out.println(TmpIcon);
            }
            TmpIcon = new ImageIcon(getClass().getResource("Pointer.gif"));
            PFlx.setValueAt(TmpIcon,PCurRow,0);
            System.out.println(TmpIcon);               
            return(PCurRow);
    }

I created a program to set an imageIcon in jtable fixed column, i created a jtable and getting a database records, then set a first column as fixed column. i set an image icon in fixed column. when i am compiling this program, i am getting only a path of the imageicon not getting an image. I fixed an imageIcon in project package folder.

    This is the code i used

public void Frm_FlxD_Database() {
           try{
                TmpRow=0;
                TmpMainPrj.PRJ_DB_CONNECTION_ASSGN();
                TmpFlxMdl =(DefaultTableModel)FlxD.getModel();
                TmpFlxDRow = 0;

                TmpFlxSt=TmpGPrjVarDec.GContn.createStatement();
                TmpFlxDRs=TmpFlxSt.executeQuery("SELECT * from activitymaster");
                PRJ_FLX_DEFTL_ASSGN(FlxD, "BEGIN");
                TmpFlxDRs.first();
                do {
                    FlxD.setValueAt(TmpFlxDRs.getString("ACTVTYDESC"), TmpRow,1);
                    FlxD.setValueAt(TmpFlxDRs.getString("ACTVTYCODE"), TmpRow,2);
                    FlxD.setValueAt(TmpFlxDRs.getString("DISPSTATUS"), TmpRow,3);
                    FlxD.setValueAt(TmpFlxDRs.getString("ACTVTYID"), TmpRow,4);
                    TmpFlxMdl.addRow(new Object[]{""});
                    TmpRow = TmpRow + 1;
                }while(TmpFlxDRs.next());

                FRM_FLXD_PTR_DATA_ASSGN(TmpFlxDRow);
           }
           catch(Exception e){
                System.out.println(e);
           }
    }
private void FRM_FLXD_PTR_DATA_ASSGN(int PFlxRow) {
           TmpFlxDRow = PRJ_FLX_PTR_ASSGN(FlxD, PFlxRow, TmpFlxDRow);
   }

    private int PRJ_FLX_PTR_ASSGN(JTable PFlx, int PCurRow, int PPrvRow) {
            ImageIcon TmpIcon;

            System.out.println(PCurRow);
            System.out.println(PPrvRow);

            if (PCurRow != PPrvRow){
                TmpIcon = new ImageIcon(getClass().getResource("Blank.gif"));
                PFlx.setValueAt(TmpIcon,PPrvRow,0);
                System.out.println(TmpIcon);
            }
            TmpIcon = new ImageIcon(getClass().getResource("Pointer.gif"));
            PFlx.setValueAt(TmpIcon,PCurRow,0);
            System.out.println(TmpIcon);               
            return(PCurRow);
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

撞了怀 2025-01-08 22:52:23

JTable 知道 Icon/ImageIcon,简单示例

在此处输入图像描述

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.*;
import javax.swing.table.*;

public class TableIcon extends JFrame implements Runnable {

    private static final long serialVersionUID = 1L;
    private JTable table;
    private JLabel myLabel = new JLabel("waiting");
    private int pHeight = 40;
    private boolean runProcess = true;
    private int count = 0;

    public TableIcon() {
        ImageIcon errorIcon = (ImageIcon) UIManager.getIcon("OptionPane.errorIcon");
        ImageIcon infoIcon = (ImageIcon) UIManager.getIcon("OptionPane.informationIcon");
        ImageIcon warnIcon = (ImageIcon) UIManager.getIcon("OptionPane.warningIcon");
        String[] columnNames = {"Picture", "Description"};
        Object[][] data = {{errorIcon, "About"}, {infoIcon, "Add"}, {warnIcon, "Copy"},};
        DefaultTableModel model = new DefaultTableModel(data, columnNames);
        table = new JTable(model) {

            private static final long serialVersionUID = 1L;
            //  Returning the Class of each column will allow different
            //  renderers to be used based on Class

            @Override
            public Class getColumnClass(int column) {
                return getValueAt(0, column).getClass();
            }
        };
        table.setRowHeight(pHeight);
        table.setPreferredScrollableViewportSize(table.getPreferredSize());
        JScrollPane scrollPane = new JScrollPane(table);
        add(scrollPane, BorderLayout.CENTER);
        myLabel.setPreferredSize(new Dimension(200, pHeight));
        myLabel.setHorizontalAlignment(SwingConstants.CENTER);
        add(myLabel, BorderLayout.SOUTH);
        EventQueue.invokeLater(new Runnable() {

            public void run() {
            }
        });
        new Thread(this).start();
    }

    public void run() {
        while (runProcess) {
            try {
                Thread.sleep(750);
            } catch (Exception e) {
                e.printStackTrace();
            }
            SwingUtilities.invokeLater(new Runnable() {

                @Override
                public void run() {
                    ImageIcon myIcon = (ImageIcon) table.getModel().getValueAt(count, 0);
                    String lbl = "JTable Row at :  " + count;
                    myLabel.setIcon(myIcon);
                    myLabel.setText(lbl);
                    count++;
                    if (count > 2) {
                        count = 0;
                    }
                }
            });
        }
    }

    public static void main(String[] args) {
        TableIcon frame = new TableIcon();
        frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
        frame.setLocation(150, 150);
        frame.pack();
        frame.setVisible(true);
    }
}

JTable knows Icon/ImageIcon, simple example

enter image description here

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.*;
import javax.swing.table.*;

public class TableIcon extends JFrame implements Runnable {

    private static final long serialVersionUID = 1L;
    private JTable table;
    private JLabel myLabel = new JLabel("waiting");
    private int pHeight = 40;
    private boolean runProcess = true;
    private int count = 0;

    public TableIcon() {
        ImageIcon errorIcon = (ImageIcon) UIManager.getIcon("OptionPane.errorIcon");
        ImageIcon infoIcon = (ImageIcon) UIManager.getIcon("OptionPane.informationIcon");
        ImageIcon warnIcon = (ImageIcon) UIManager.getIcon("OptionPane.warningIcon");
        String[] columnNames = {"Picture", "Description"};
        Object[][] data = {{errorIcon, "About"}, {infoIcon, "Add"}, {warnIcon, "Copy"},};
        DefaultTableModel model = new DefaultTableModel(data, columnNames);
        table = new JTable(model) {

            private static final long serialVersionUID = 1L;
            //  Returning the Class of each column will allow different
            //  renderers to be used based on Class

            @Override
            public Class getColumnClass(int column) {
                return getValueAt(0, column).getClass();
            }
        };
        table.setRowHeight(pHeight);
        table.setPreferredScrollableViewportSize(table.getPreferredSize());
        JScrollPane scrollPane = new JScrollPane(table);
        add(scrollPane, BorderLayout.CENTER);
        myLabel.setPreferredSize(new Dimension(200, pHeight));
        myLabel.setHorizontalAlignment(SwingConstants.CENTER);
        add(myLabel, BorderLayout.SOUTH);
        EventQueue.invokeLater(new Runnable() {

            public void run() {
            }
        });
        new Thread(this).start();
    }

    public void run() {
        while (runProcess) {
            try {
                Thread.sleep(750);
            } catch (Exception e) {
                e.printStackTrace();
            }
            SwingUtilities.invokeLater(new Runnable() {

                @Override
                public void run() {
                    ImageIcon myIcon = (ImageIcon) table.getModel().getValueAt(count, 0);
                    String lbl = "JTable Row at :  " + count;
                    myLabel.setIcon(myIcon);
                    myLabel.setText(lbl);
                    count++;
                    if (count > 2) {
                        count = 0;
                    }
                }
            });
        }
    }

    public static void main(String[] args) {
        TableIcon frame = new TableIcon();
        frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
        frame.setLocation(150, 150);
        frame.pack();
        frame.setVisible(true);
    }
}
爱本泡沫多脆弱 2025-01-08 22:52:23

您不应在数据模型中添加图标。您应该添加数据(布尔指示符、字符串等),并为此列使用渲染器,该渲染器将根据该列的数据显示适当的图标。

请参阅 http://docs.oracle.com/javase/tutorial/ uiswing/components/table.html#editrender 有关单元格渲染器的信息和示例。

请学习 Java 命名约定并遵守它们。你的代码不可读。请参阅 http://www.oracle.com/technetwork/java/codeconv-138413。 html

You should not add an icon in your data model. You should add data (a boolean indicator, a String, whatever), and use a renderer for this column that will display the appropriate icon based on the data of the column.

See http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#editrender for information and examples about cell renderers.

And please, learn the Java naming conventions and stick to them. Your code is unreadable. See http://www.oracle.com/technetwork/java/codeconv-138413.html

清音悠歌 2025-01-08 22:52:23

在不深入了解您的代码的情况下,我的猜测是它与您的 tablemodel getColumnClass() 方法有关。有很多教程如何解决这个问题。目前它可能由对象的表 defaultrenderer 渲染。

此帖子应该对您有帮助

好消息是,您不必混淆代码,它已经很难阅读,甚至更难理解。您可能需要阅读一些 Java 代码指南来改进您的代码。

Without getting to much into your code my guess is it has something to do with your tablemodel getColumnClass() method. There are plenty of tutorials how to fix that. Currently its probably rendered by tables defaultrenderer for object.

This thread should be helpful to you.

Good news is, you dont have to obfuscate your code, its already really hard to read and even harder to understand. You might want to read some java code guidelines to improve your code.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文