我是Java的法国人和新手.. 关于“voilier”(船)的“regates”(种族),我有一个项目要做。 有一个regate的组合,这必须是一个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) {
}
}
答案 0 :(得分:2)
您应该使用EventListener
。
ChangeListener
答案 1 :(得分:1)
以下一种方式更改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
,尝试从FlowLayout
和BorderLayout
开始,这非常简单。
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
以进行滚动。
有用的人: