[英]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
,嘗試從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
進行滾動。
有用的提示:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.