我希望能夠將多個選項卡添加到我的程序中。這些選項卡將包含jTable組件。我希望能夠點擊添加一個新標籤,輸入一些信息,並向表中添加一些值,然後將其插入到tabbedPane中。下面我有SSCE這樣做,但是當你嘗試添加第二個時,表格不會顯示在對話框中。任何人都可以幫我弄清楚爲什麼? (供參考:我使用NetBeans和GUI設計)將值添加到表格並將其添加到主窗體
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
public class tabtest extends javax.swing.JFrame {
public tabtest() {
initComponents();
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
addTabDialog = new javax.swing.JDialog();
titleTextBox = new javax.swing.JTextField();
jLabel1 = new javax.swing.JLabel();
addTabConfirmButton = new javax.swing.JButton();
jScrollPane1 = new javax.swing.JScrollPane();
jTable1 = new javax.swing.JTable();
jLabel2 = new javax.swing.JLabel();
tabPane = new javax.swing.JTabbedPane();
addTabButton = new javax.swing.JButton();
addTabDialog.setBounds(new java.awt.Rectangle(0, 0, 400, 400));
titleTextBox.setText("New Tab");
jLabel1.setText("Tab Title");
addTabConfirmButton.setText("Confirm");
addTabConfirmButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
addTabConfirmButtonActionPerformed(evt);
}
});
jTable1.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null}
},
new String [] {
"assignment", "points", "score"
}
) {
Class[] types = new Class [] {
java.lang.String.class, java.lang.Integer.class, java.lang.Integer.class
};
public Class getColumnClass(int columnIndex) {
return types [columnIndex];
}
});
jScrollPane1.setViewportView(jTable1);
javax.swing.GroupLayout addTabDialogLayout = new javax.swing.GroupLayout(addTabDialog.getContentPane());
addTabDialog.getContentPane().setLayout(addTabDialogLayout);
addTabDialogLayout.setHorizontalGroup(
addTabDialogLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(addTabDialogLayout.createSequentialGroup()
.addGap(87, 87, 87)
.addComponent(jLabel1)
.addGap(18, 18, 18)
.addGroup(addTabDialogLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(titleTextBox, javax.swing.GroupLayout.PREFERRED_SIZE, 96, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(addTabDialogLayout.createSequentialGroup()
.addGap(6, 6, 6)
.addComponent(addTabConfirmButton)))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, addTabDialogLayout.createSequentialGroup()
.addContainerGap(43, Short.MAX_VALUE)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 314, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(32, 32, 32))
);
addTabDialogLayout.setVerticalGroup(
addTabDialogLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(addTabDialogLayout.createSequentialGroup()
.addGap(77, 77, 77)
.addGroup(addTabDialogLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(titleTextBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel1))
.addGap(18, 18, 18)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 133, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(addTabConfirmButton)
.addGap(212, 212, 212))
);
jLabel2.setText("This is a new Tab");
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
addTabButton.setText("add new tab");
addTabButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
addTabButtonActionPerformed(evt);
}
});
tabPane.addTab("+", addTabButton);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(tabPane, javax.swing.GroupLayout.PREFERRED_SIZE, 326, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(64, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(tabPane, javax.swing.GroupLayout.PREFERRED_SIZE, 178, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(111, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
private void addTabButtonActionPerformed(java.awt.event.ActionEvent evt) {
addTabDialog.setLocationRelativeTo(null);
addTabDialog.setVisible(true);
}
private void addTabConfirmButtonActionPerformed(java.awt.event.ActionEvent evt) {
JTable table=jTable1;
tabPane.insertTab(titleTextBox.getText(),null,new JScrollPane(table),"Hello",tabPane.getTabCount()-1);
//tabPane.addTab(titleTextBox.getText(),newTab);
tabPane.setSelectedIndex(tabPane.getTabCount()-1);
addTabDialog.setVisible(false);
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new tabtest().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton addTabButton;
private javax.swing.JButton addTabConfirmButton;
private javax.swing.JDialog addTabDialog;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTable jTable1;
private javax.swing.JTabbedPane tabPane;
private javax.swing.JTextField titleTextBox;
// End of variables declaration
}
而且...是它更好地使用javaFX2蕩然?它會使這樣的事情更容易嗎?和揮杆編碼有很大不同嗎?有很多東西需要學習嗎?
謝謝。我知道這是這樣的。至於相同的模型即時創建一個AbstractTableModel,但我不能只在我的代碼中將該模型應用於jTable1,然後它將與表一樣? (我可能會對錶模型是什麼感到困惑,當列2包含int時,列1是否包含字符串等?或者它是否也包含所有數據?) – Sup3rb0wlz
@ Sup3r_b0wlz:請參閱編輯以回答。 –
你真棒。哈哈很好的解釋。 – Sup3rb0wlz