Quiero actualizar la tabla cuando se hace clic en el botón
Soy novato de Swing.
Quiero actualizar la tabla después de hacer clic en el botón (botón Listo). Creo que los datos son correctos pero la pantalla no funciona.
Los siguientes son explicaciones de mi programa.
marque checkBoxes y haga clic en el botón Listola capa inferior debería cambiar.no hay principalEste es mi código:
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableModel;
import net.miginfocom.swing.MigLayout;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Gui extends JFrame {
class Table extends JTable{
public Table(DefaultTableModel model) {
super(model);
}
public Class getColumnClass(int column) {
switch (column) {
case 1:
return Boolean.class;
default:
return String.class;
}
}
}
private final int BANDNUM = 43;
int[] checkBands;
Object[][] data;
Table table;
JScrollPane upperScrollpane;
JScrollPane downScrollPane;
JSplitPane splitPane;
public Gui() {
// BASE SETTING
setSize(900, 800);
JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BorderLayout(5, 5));
JPanel northPanel = new JPanel(new MigLayout());
// northPanel SETTING
JLabel labelIp = new JLabel("IP");
JTextField tFIp = new JTextField(20);
JLabel labelMask = new JLabel("Subnet Mask");
JTextField tFMask = new JTextField(20);
JLabel labelPing = new JLabel("Ping");
JTextField tFPing = new JTextField(10);
JButton btnReady = new JButton("Ready");
JLabel labelReady = new JLabel("NOT READY");
northPanel.add(labelIp);
northPanel.add(tFIp);
northPanel.add(labelMask);
northPanel.add(tFMask);
northPanel.add(labelPing);
northPanel.add(tFPing);
northPanel.add(btnReady);
northPanel.add(labelReady, "wrap");
// upper scrollpane -> will be included in JsplitPane Upper Side
JPanel checkPanel = new JPanel(new MigLayout());
JCheckBox[] checkBoxes = new JCheckBox[BANDNUM];
JButton doneButton = new JButton("DONE");
for (int i = 0; i < BANDNUM; i++) {
checkBoxes[i] = new JCheckBox("" + (i + 1));
checkBoxes[i].setHorizontalTextPosition(SwingConstants.CENTER);
checkBoxes[i].setVerticalTextPosition(SwingConstants.BOTTOM);
if (i == 32) {
checkPanel.add(checkBoxes[i], "wrap");
} else if (i == 42) {
checkPanel.add(checkBoxes[i], "wrap");
} else {
checkPanel.add(checkBoxes[i]);
}
}
checkPanel.add(doneButton, "span 3");
// startButton Action
/////////////////////////////////////////
//I think you should watch from this line!!!
/////////////////////////////////////////
doneButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 1. CHECK WHAT ARE CLICKED
int length = 0;
for (int i = 0; i < BANDNUM; i++)
if (checkBoxes[i].isSelected())
length++;
checkBands = new int[length];
System.out.println(length);
int k = 0;
for (int i = 0; i < BANDNUM; i++) {
if (checkBoxes[i].isSelected()) {
checkBands[k++] = i + 1;
}
}
// 2. Ready for display
data = new Object[length][6];
for (int i = 0; i < length; i++) {
data[i][0] = checkBands[i];
data[i][1] = true;
data[i][2] = 1;
data[i][3] = 2;
data[i][4] = 3;
data[i][5] = 4;
}
// 3. display
String[] colNames = { "BAND", "Test1", "Test2", "Test3",
"Test4", "Test5" };
DefaultTableModel model = new DefaultTableModel(data, colNames);
table = new Table(model);
setVisible(true);
table.repaint();
downScrollPane.repaint();
splitPane.repaint();
}
});
// down scrollpane -> will be included in JsplitPane down Side
String[] colNames = { "BAND", "Test1", "Test2", "Test3", "Test4",
"Test5" };
Object[][] data = { { null, null, null, null, null, null }};
DefaultTableModel model = new DefaultTableModel(data, colNames);
table = new Table(model);
// include
upperScrollpane = new JScrollPane(checkPanel);
downScrollPane = new JScrollPane(table);
splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, upperScrollpane, downScrollPane);
mainPanel.add(northPanel, BorderLayout.NORTH);
mainPanel.add(splitPane, BorderLayout.CENTER);
getContentPane().add(mainPanel);
setVisible(true);
}
}