我是Java的新手,我遇到了一个问题。我创建了一个带有Swing UI的类,其中包含一个名为'jTextAreaConsole'的jTextArea。:
/MyFolder
此类导入另一个名为“dbConverter”的类:
public class converterUI extends javax.swing.JFrame {
dbConverter是一个带有一个方法的简单类:
package my.converterui;
import dbToExcel.dbConverter;
runQuery和writeOut方法在此类扩展的“common”类中详细说明。我想要做的是在公共类引用jTextAreaConsole对象以向其追加文本。我已经尝试过使用super.jTextAreaConsole.append(str)并运行但没有做任何事情。
编辑:这里的基本示例:
public class dbConverter extends common{
public static void convert(String sourceDB, String sourceQry, String destination, String objectName){
dbConverter converter = new dbConverter();
Connection con = converter.getConnection(sourceDB);
String sql = sourceQry;
ResultSet result = converter.runQuery1(con,sql);
converter.writeOut(result, objectName, destination);
closeConnection(con);
}
public static void main(String[] args) {
}
}
谢谢,
答案 0 :(得分:1)
根据您的设计,您有两种选择:
MyProject
的实例,我们称之为mp
。然后在actionPerformed
(或您的jButton1ActionPerformed
,仍然不确定为什么需要它),请致电mp.clickAction()
。clickAction
设为静态,然后调用MyProject.clickAction()
。 MyProject
扩展mainForm
(应该重命名为MainForm
)的事实已经告诉我你在设计中可能做错了。
修改强>
在这里,我为你编写了代码。如果您以后需要对其进行扩展并且由于设计不好而不容易做到,请不要感到惊讶。
import java.awt.EventQueue;
import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.WindowConstants;
import static javax.swing.GroupLayout.*;
import static javax.swing.GroupLayout.Alignment.*;
public class MyProject {
private static MainForm gui = new MainForm();
public static void main(String[] args) {
EventQueue.invokeLater(() -> gui.setVisible(true));
}
public static void clickAction() {
gui.passText();
}
}
class MainForm extends JFrame {
private JTextArea jTextArea1 = new JTextArea();
public MainForm() {
initComponents();
}
private void initComponents() {
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JScrollPane jScrollPane1 = new JScrollPane();
JButton jButton1 = new JButton();
jTextArea1.setColumns(20);
jTextArea1.setRows(5);
jScrollPane1.setViewportView(jTextArea1);
jButton1.setText("Click me");
jButton1.addActionListener(e -> MyProject.clickAction());
//@formatter:off
GroupLayout layout = new GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(40, 40, 40)
.addComponent(jScrollPane1, PREFERRED_SIZE, 318, PREFERRED_SIZE)
.addContainerGap(42, Short.MAX_VALUE))
.addGroup(TRAILING, layout.createSequentialGroup()
.addContainerGap(DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jButton1)
.addGap(162, 162, 162))
);
layout.setVerticalGroup(
layout.createParallelGroup(LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(46, 46, 46)
.addComponent(jButton1)
.addGap(27, 27, 27)
.addComponent(jScrollPane1, PREFERRED_SIZE, 179, PREFERRED_SIZE)
.addContainerGap(25, Short.MAX_VALUE))
);
//@formatter:on
pack();
}
public void passText() {
jTextArea1.append("This is a test");
}
}
我做了什么:
MyProjext
不再是MainForm
的子类,因为它没有意义。main
因为它应该只有1个main。我选择MyProjext
作为切入点。MyProjext
包含对GUI(MainForm
)的引用,因此它可以调用其方法。在我的观点1中,我提出了相反的建议:让GUI保持对MyProjext
的引用。根据设计,它仍然是一个更好的选择。MyProjext
的{{1}}现在clickAction
正如我在我的观点中所建议的那样2.再次,这是一个盲目的设计选择。