我的问题是让我的Main类和Journal类连接在一起,在Main类中用户将输入两个变量并单击按钮来创建表,在Journal类中它将读取两个变量。
我使用netbeans来创建Main类和我自己创建表类的方法请帮忙!谢谢! 这是主要类Netbeans告诉我在右键单击>时编辑的部分。活动>行动>行动执行
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
和我的Journal类,我试过让它读取JTextField 1和2,但我不知道如何组合它们。
import java.awt.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;
public class Journal extends JPanel
{
public Journal()
{
String colN1 = "Date";
String colN2 = "Student";
int a = Integer.parseInt(newJournal.jTextField1.getText());
int b = Integer.parseInt(newJournal.jTextField2.getText());
int c = a*2/b;
int col = c*2;
String[] columnNames = new String[col];
for(int colF = 0; colF < col; colF++)
{
if(colF%2 == 0)
{
columnNames[colF] = colN1;
}
else
{
columnNames[colF] = colN2;
}
}
int row = b;
int d = 1;
int s = 1;
int x = 0;
Integer f = new Integer(1);
Object[][] data = new Object[row][col];
for (int col1 = 0; col1 < data[0].length; col1++)
{
for (int row1 = 0; row1<data.length; row1++)
{
if(d > b)
{
d = 1;
}
else if(s > a || x > 2)
{
s = 1;
x++;
}
else if (row1 > row)
{
row1 = 0;
}
else if(col1%2 == 0)
{
data[row1][col1]= "Day " + d;
d++;
}
else
{
data[row1][col1]= s;
s++;
}
}
}
for (int col2 = 0; col2 < data[0].length; col2++)
{
for (int row2 = 0; row2<data.length; row2++)
{
if(s > a || x > 2)
{
s = 1;
x++;
}
else if(s!=data[row2][col2]&&col2%2!=0)
{
data[row2][col2] = s;
s++;
}
}
}
for (int row3 = 0; row3<data.length; row3++)
{
for (int col3 = 0; col3 < data[0].length; col3++)
{
int rowA = row3 + 1;
int rowS = row3 - 1;
int rows = 1;
int colA = col3 + 1;
int colS = col3 - 1;
int cols = 1;
if(s > a || x > 2)
{
s = 1;
x++;
}
else if(s==data[rowA][cols] && s == data[rowS][cols])
{
cols=cols+2;
}
else if (s == data[rows][colA] && s == data [rows][colS])
{
rows++;
}
else if(s!=data[row3][col3]&&col3%2!=0)
{
data[row3][col3] = s;
s++;
}
}
}
JTable table = new JTable(data, columnNames);
table.setPreferredScrollableViewportSize(table.getPreferredSize());
JScrollPane scrollPane = new JScrollPane(table);
add(scrollPane);
}
private static void gui()
{
JFrame gui = new JFrame();
gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
gui.setTitle("Journal List");
gui.setSize(700,200);
gui.setLocationRelativeTo(null);
gui.setVisible(true);
gui.add(new Journal());
}
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
gui();
}
});
}
}
答案 0 :(得分:3)
目前,您的JTable
是Journal
构造函数中的本地作用域,因此无法从其他任何位置访问 。您要做的是将其声明为类成员,并为其设置getter
。
public class Journal extends JPanel {
private JTable table;
public Journal() {
table = new JTable(...);
}
public JTable getTable() {
return table;
}
}
现在可以使用table
从Main
班级访问和检索getTable()
。
此外,您还希望使用TableModel
动态更新数据。你可以使用一个简单的,已经实现的DefaultTableModel。您想将此模型设置为JTable
。像这样的东西
public Journal() {
...
DefaultTableModel model = new DefaultTableModel(data, columns);
table = new JTable(model);
}
因此,您已为Main
课程设置了所有内容。在actionPerfomed
中,您可以执行此类操作
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
String data1 = textField1.getText();
String data2 = textField2.getText();
JTable table = journal.getTable();
DefaultTableMode model = (DefaultTableModel)table.getModel();
model.addRow( new Object[] { data1, data2 } );
}
附注
main
方法,因为我认为Main
类已经有main
方法。 Journal
课程似乎在其JFrame
方法中使用main
,我认为您的Main
课程也是JFrame
。您可以做的只是让Journal
成为JDialog
并将JTable
添加到其中。