簡體   English   中英

如何使用Jcombo + Listener

[英]How to use Jcombo + Listener

我是Java的法語和新手。我有一個項目涉及“專職”(種族)的“法規”(競賽)。 有一個組合,這必須使一個Jtable成為船艦,我們可以在其中增加比賽結束的時間。 我的問題是,當我們單擊組合中的一項時,我想創建此Jtable,但是我不知道該怎么做。

我的代碼:

package eole;

import java.awt.event.ItemEvent;

public class ArrivéesVoiliers extends JFrame implements ItemListener {

    private JPanel contentPane;
    private JTable tableArrivées;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    ArrivéesVoiliers frame = new ArrivéesVoiliers();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public ArrivéesVoiliers() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JComboBox combRegate = new JComboBox();
        combRegate.setBounds(30, 25, 90, 20);
        contentPane.add(combRegate);
        ArrayList<Regate> lesReg = Application.getRegates();

        for (Regate laReg : lesReg) {
            combRegate.addItem(laReg.getNomReg());
        }

        combRegate.addItemListener(this);

        String nom = (String) combRegate.getSelectedItem();
        Regate regSelec = Application.getRegate(nom);

        JLabel lblDateDep = new JLabel(regSelec.getDate());
        lblDateDep.setBounds(130, 31, 60, 14);
        contentPane.add(lblDateDep);

        JLabel lblHeuredepart = new JLabel(regSelec.getTime());
        lblHeuredepart.setBounds(200, 31, 60, 14);
        contentPane.add(lblHeuredepart);

        ArrayList<Voilier> voiliersPart = Application.getVoiliers(regSelec);

        String[] entetes = { "Voiliers participants", " Classe", "Rating",
                "Heure arrivée", "en seconde", "Abandon", "Stop Chrono",
                "Ajout" };

        DefaultTableModel voilPart = new DefaultTableModel();
        voilPart.setColumnCount(8);
        for (Voilier unVoil : voiliersPart) {
            voilPart.addRow(new Object[] { unVoil.getNom(), unVoil.getNum(),
                    unVoil.getRating(), "Heure arrivée", "en seconde",
                    new Boolean(false), new Boolean(false), "Ajouter" });
        }

        new AbstractTableModel() {
            public int getColumnCount() {
                return 0;
            }

            public int getRowCount() {
                return 0;
            }

            public Object getValueAt(int rowIndex, int columnIndex) {
                return null;
            }

            public boolean isCellEditable(int row, int col) {
                if (col == 4) {
                    return true;
                } else {
                    return false;
                }
            }
        };

        tableArrivées = new JTable(voilPart);
        tableArrivées.setBounds(50, 228, 312, -125);
        contentPane.add(tableArrivées);

    }

    @Override
    public void itemStateChanged(ItemEvent e) {
    }
}

代替使用EventListener ,應該使用ChangeListener

通過以下方式更改您的itemStateChanged(ItemEvent e)方法:

@Override
public void itemStateChanged(ItemEvent e) {
    if(e.getStateChange() == ItemEvent.SELECTED){
        voilPart.addRow(new Object[] {  "col1",  "col2",
                 "col3", "col4", "col5",
                new Boolean(false), new Boolean(false), "col8" });
    }
}

我也建議您:

1)使用setLayout(null); setBounds()方法代替,嘗試使用LayoutManager ,嘗試從FlowLayoutBorderLayout開始,這確實很簡單。

2)對於設置JFrame大小,使用方法pack()

3)我認為很entetes的是,列名如下創建您的TableModel

DefaultTableModel voilPart = new DefaultTableModel(new Object[][]{},entetes);

4)將voilPart設置為實例變量,以便在itemStateChanged()方法中使用它來添加新行。

5)這不是重要的代碼,可以刪除它,因為它是從未使用過的局部變量:

new AbstractTableModel() {
    public int getColumnCount() {
        return 0;
    }

    public int getRowCount() {
        return 0;
    }

    public Object getValueAt(int rowIndex, int columnIndex) {
        return null;
    }

    public boolean isCellEditable(int row, int col) {
        if (col == 4) {
            return true;
        } else {
            return false;
        }
    }
};

6)將表格添加到JScrollPane進行滾動。

有用的提示:

如何使用滾動窗格

JTable教程

Java中的變量

暫無
暫無

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

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