gpt4 book ai didi

java - Jbutton 执行更多操作

转载 作者:行者123 更新时间:2023-12-02 06:13:26 25 4
gpt4 key购买 nike

我有一个 JDialog,其中显示 Jtable,JTable 的单元格是一个打开新 JFrame (CoveNew) 的 JButton:

public void birthstats(String stat) {
//System.out.println(classeMain);
String titolo=new String();
if ("nascite".equals(stat)){
titolo=lingua_corrente.getString("nascite_title");
elencojLabel.setText(titolo);
}
else{
titolo=lingua_corrente.getString("anella");
elencojLabel.setText(titolo);
}
Dimension dimensioni = new Dimension(500, 700);
nascitejDialog.setSize(dimensioni);
nascitejDialog.setTitle("GesAll 1.0 - " + titolo);
nascitejDialog.setModal(true);
hatchlistijTable.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null, null}
},
new String [] {
"Num", lingua_corrente.getString("coppiaLabel"), lingua_corrente.getString("annojLabel"), lingua_corrente.getString("jLabel8"), lingua_corrente.getString("NascitaLabel")
}
) {

Class[] types = new Class [] {
java.lang.String.class, java.lang.String.class, java.lang.String.class, JButton.class, java.lang.String.class
};
boolean[] canEdit = new boolean [] {
false, false, false, false, false
};

@Override
public Class getColumnClass(int columnIndex) {
return types [columnIndex];
}

@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
});
hatchlistijTable.setShowGrid(true);
hatchlistijTable.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);
hatchlistijTable.getColumnModel().getColumn(0).setHeaderValue("Num."); //Numero
hatchlistijTable.getColumnModel().getColumn(0).setResizable(false);
hatchlistijTable.getColumnModel().getColumn(0).setPreferredWidth(60);
hatchlistijTable.getColumnModel().getColumn(1).setHeaderValue(lingua_corrente.getString("coppiaLabel")); //coppia
hatchlistijTable.getColumnModel().getColumn(1).setResizable(false);
hatchlistijTable.getColumnModel().getColumn(1).setPreferredWidth(50);
hatchlistijTable.getColumnModel().getColumn(2).setHeaderValue(lingua_corrente.getString("annojLabel")); //anno
hatchlistijTable.getColumnModel().getColumn(2).setResizable(false);
hatchlistijTable.getColumnModel().getColumn(2).setPreferredWidth(50);
hatchlistijTable.getColumnModel().getColumn(3).setHeaderValue(lingua_corrente.getString("jLabel8")); //gabbia
hatchlistijTable.getColumnModel().getColumn(3).setResizable(false);
hatchlistijTable.getColumnModel().getColumn(3).setPreferredWidth(50);
if ("nascite".equals(stat)){
hatchlistijTable.getColumnModel().getColumn(4).setHeaderValue(lingua_corrente.getString("schiusa")); //data nascita prevista
}
else{
hatchlistijTable.getColumnModel().getColumn(4).setHeaderValue(lingua_corrente.getString("NascitaLabel")); //data nascita
}
hatchlistijTable.getColumnModel().getColumn(4).setResizable(false);
hatchlistijTable.getColumnModel().getColumn(4).setPreferredWidth(150);
hatchlistijTable.setRowHeight(25);
//hatchlistijTable.getColumnModel().getColumn(5).setHeaderValue("Jump"); //salto
//hatchlistijTable.getColumnModel().getColumn(5).setResizable(false);
//hatchlistijTable.getColumnModel().getColumn(5).setPreferredWidth(50);
for (int i=hatchlistijTable.getRowCount()-1;i>=0;i--)
((javax.swing.table.DefaultTableModel) hatchlistijTable.getModel()).removeRow(i);
String qDep = "SELECT d FROM Deposizioni d WHERE d.fecondo=" + '"' + 'S' +'"' +" AND d.morto=" + '"' + 'N' +'"' + " AND d.dataSchiusa is null ORDER by d.dataDeposizione ASC";
if (!"nascite".equals(stat))
qDep = "SELECT d FROM Deposizioni d WHERE d.morto=" + '"' + 'N' +'"' + " AND d.anello is null" + " AND d.dataSchiusa is not null ORDER by d.dataSchiusa ASC";

List depo = DBgateway.getInstance().Run_query(qDep);
System.out.println(depo.size());
//Deposizioni dd = (Deposizioni) DBgateway.getInstance().Run_query(qDep);
for (int i=0;i<depo.size();i++){
//Deposizioni dd = (Deposizioni) DBgateway.getInstance().Run_query(qDep).get(i);
Deposizioni dd = (Deposizioni) depo.get(i);
int toAdd = Program.getConf().getSchiusa();
Calendar cal = Calendar.getInstance();
if ("nascite".equals(stat)){
cal.setTime(dd.getDataDeposizione());
}
else {
toAdd = Program.getConf().getAnellare();
cal.setTime(dd.getDataSchiusa());
}
Calendar today=Calendar.getInstance();
cal.add(Calendar.DATE, toAdd); // add n days
//if(today.after(cal)){
System.out.println(toAdd + " " + today.after(cal) +" " + "nascite".equals(stat));
Object [] rowData=getRowData(dd,i, cal,stat);
if("nascite".equals(stat))
((javax.swing.table.DefaultTableModel) hatchlistijTable.getModel()).addRow(rowData);
else
if(today.after(cal) && !"nascite".equals(stat))
((javax.swing.table.DefaultTableModel) hatchlistijTable.getModel()).addRow(rowData);
}
TableCellRenderer buttonRenderer = new JTableButtonRenderer();
hatchlistijTable.getColumn(lingua_corrente.getString("jLabel8")).setCellRenderer(buttonRenderer);
hatchlistijTable.addMouseListener(new JTableButtonMousePriListener(hatchlistijTable));

nascitejDialog.setVisible(true);
}


private Object[] getRowData(Deposizioni dd,int i, Calendar cal, final String stat) {
try {
String qCp="SELECT c FROM Coppie c WHERE c.idCoppia=" + findDatiCova(dd.getIdDeposizione()).getIdCoppia();
Coppie rCp=(Coppie) DBgateway.getInstance().Run_query(qCp).get(0);
String data = df.format(cal.getTime());
//Bottone salto cova
final JButton jump=new JButton(rCp.getGabbia().toString());
jump.addActionListener(new java.awt.event.ActionListener() {
private Object classeMain = this.getClass();
@Override
public void actionPerformed(java.awt.event.ActionEvent evt) {
jumpActionPerformed(evt);
}

private void jumpActionPerformed(ActionEvent evt) {
System.out.println("jump" +jump.getText().toString());
String qS ="SELECT c.idCoppia from Coppie c WHERE c.attiva=" + "'"+"S"+"'" + " AND c.gabbia="+jump.getText().toString();
CoveNew cova = new CoveNew(mainClass, (Integer) DBgateway.getInstance().Run_query(qS).get(0),stat);
cova.setVisible(true);
nascitejDialog.setVisible(false);
mainClass.setVisible(false);
}
});
//

Object [] rowData = {i+1, // progressivogianluca
rCp.getNumeroCoppia(), // numero coppia
rCp.getAnno(),
//rCp.getGabbia(), // fecondo
jump,
data};
return(rowData);
} catch (IOException ex) {
Logger.getLogger(Main_menu.class.getName()).log(Level.SEVERE, null, ex);
return null;
}
}


private static class JTableButtonMousePriListener extends MouseAdapter {
private final JTable table;

public JTableButtonMousePriListener(JTable table) {
this.table = table;
}
@Override public void mouseClicked(MouseEvent e) {
int column = table.getColumnModel().getColumnIndexAtX(e.getX());
int row = e.getY()/table.getRowHeight();

if (row < table.getRowCount() && row >= 0 && column < table.getColumnCount() && column >= 0) {
Object value = table.getValueAt(row, column);
if (value instanceof JButton) {
((JButton)value).doClick();
//if(((JButton)value).isEnabled())
// anella(row,column);
}
}
}

}

JTable 正确显示,我遇到的问题是,当我第一次单击 Jbutton 时,新的 JFrame 将显示一次,如果我再次单击,它将显示 7 的 3 倍,依此类推。你能帮我只展示一次吗?谢谢吉安卢卡。

最佳答案

您不应该将 JButton 添加到 TableModel。 JTable 使用呈现器和编辑器来显示数据。

参见Table Button Column一种允许您在列中存储文本但随后对该列使用自定义渲染器/编辑器的方法,使其看起来和操作就像一个按钮。您所需要做的就是在单击单元格时提供一个操作。

关于java - Jbutton 执行更多操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21677969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com