簡體   English   中英

使用Java Swing在JTable上獲取字符串值而不是復選框?

[英]Getting String value rather than checkbox on JTable using Java Swing?

我正在創建一個JTable,我已經設法創建一個可滾動的表,並添加了一些隨機數據。 現在我想嘗試在每行的最后一列添加一個復選框。

現在這是我到目前為止所得到的:

表的截圖

當你查看他的表時,你可以看到,而不是獲取復選框,我得到一個字符串值為“false”的列,這不是我想要的。 我想要一個可選擇的框,我想允許多個選擇。 這是該類的代碼:

import java.awt.BorderLayout; 
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.JScrollPane;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import javax.swing.JButton;


public class BiogramTable extends JFrame {

    private JPanel contentPane;
    private JTable table;
    private JCheckBox checkbox;
    private static final long serialVersionUID = 1L; 




    /**
     * Create the frame.
     */
    public BiogramTable() {
        Object[] columns = {"Name", "Age" , "Gender" , "Boolean"};

        Object[][] data = {{"John", "18", "Male", false}, 
                {"Jessica", "19", "Female", false}, 
                {"Dave", "52", "Male", false},
                {"Jake", "30", "Male", false}, 
                {"Jeremy", "14", "Male", false},
                {"Jemma", "34", "Female", false},
                {"Amy", "16", "Female", false},
                {"Patrick", "18", "Male", false}};
        DefaultTableModel model = new DefaultTableModel(data, columns);
        final JCheckBox checkBox = new JCheckBox();


        table = new JTable(model) {

            private static final long serialVersionUID = 1L;


            //@Override
            //public Class getColumnClass(int column) {
                //switch (column) {
                //case 0:
                //  return String.class;
                //case 1:
                    //return String.class;
                //case 2:
                    //return Integer.class;
                //case 3:
                    //return Double.class;
                //default:
                    //return Boolean.class;
                //}
            //}

        };

        //table.setPreferredScrollableViewportSize(table.getPreferredSize());
        JScrollPane scrollPane = new JScrollPane(table);
        getContentPane().add(scrollPane);
    }

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                BiogramTable frame = new BiogramTable();
                frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
                frame.pack();
                frame.setLocation(150, 150);
                frame.setVisible(true);
            }

        });
    }
}

我已經對此做了大量研究,但我還沒有找到使用swing的解決方案。 如果您能讓我知道我的方法有什么問題,我會很高興,讓我知道正確的方法是什么,因為這是我第一次使用Windows構建器在Java swing中創建JTable。 我在堆棧溢出中看到了類似的問題,但我的問題是不同的,因為我得到的是String而不是復選框。 所以我的問題是為什么會這樣?

您應該根據您的數據要求覆蓋getColumnClass方法。 請參閱以下更改。

表圖像

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.JScrollPane;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import javax.swing.JButton;

class BiogramTable extends JFrame {

    private JPanel contentPane;
    private JTable table;
    private JCheckBox checkbox;
    private static final long serialVersionUID = 1L;

    /**
     * Create the frame.
     */
    public BiogramTable() {
        Object[] columns = {"Name", "Age", "Gender", "Boolean"};

        Object[][] data = {{"John", "18", "Male", false},
        {"Jessica", "19", "Female", false},
        {"Dave", "52", "Male", false},
        {"Jake", "30", "Male", false},
        {"Jeremy", "14", "Male", false},
        {"Jemma", "34", "Female", false},
        {"Amy", "16", "Female", false},
        {"Patrick", "18", "Male", false}};
        DefaultTableModel model = new DefaultTableModel(data, columns);
        final JCheckBox checkBox = new JCheckBox();

        table = new JTable(model) {

            private static final long serialVersionUID = 1L;

            @Override
            public Class getColumnClass(int column) {
                switch (column) {
                    case 0:
                        return String.class;
                    case 1:
                        return Integer.class;
                    case 2:
                        return String.class;
                    case 3:
                        return Boolean.class;
                    default:
                        return String.class;
                }
            }
        };

        //table.setPreferredScrollableViewportSize(table.getPreferredSize());
        JScrollPane scrollPane = new JScrollPane(table);
        getContentPane().add(scrollPane);
    }

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                BiogramTable frame = new BiogramTable();
                frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
                frame.pack();
                frame.setLocation(150, 150);
                frame.setVisible(true);
            }

        });
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM