gpt4 book ai didi

Java:GUI - JButton 打开新的 JPanel 并读取 JTextFields

转载 作者:行者123 更新时间:2023-12-01 23:12:23 25 4
gpt4 key购买 nike

我的问题是让我的 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();
}
});
}
}

最佳答案

目前,您的 JTable 位于 Journal 构造函数中的本地范围,因此无法从其他任何地方访问它。您想要做的是将其声明为类成员,并为它提供一个getter

  public class Journal extends JPanel {
private JTable table;

public Journal() {
table = new JTable(...);
}

public JTable getTable() {
return table;
}
}

现在可以使用 getTable()Main 类访问和检索

此外,您还需要使用 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 方法。
  • 另请查看The Use of Multiple JFrames, Good/Bad Practice? 。看起来您的 Journal 类在其 main 方法中使用了 JFrame ,我假设您的 Main 类是JFrame 也是如此。您可以做的就是将 Journal 制作为 JDialog 并向其中添加 JTable

关于Java:GUI - JButton 打开新的 JPanel 并读取 JTextFields,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21676920/

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