我在概念上遇到了如何使我的应用程序工作的问题。
我有15个JTextField组件和15个JButton组件以及1个JTextArea。我希望每个按钮在每个相应的文本字段中插入textarea中的文本。
如果您希望看到图形来解释此设置 - [http://i.imgur.com/Vnc3C.png]here1
我设法将frame.finaltext添加到Curriculum主题类中,但是在actionPerformed方法中没有看到它。
获取frame.finaltext.append(textfields [i])
的最佳方式是什么?TIA 亚当
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import net.miginfocom.swing.MigLayout;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.Dimension;
public class CurriculumSubject extends JPanel implements ActionListener{
/**
* This is an class that will hold details for each subject.
*/
// First we want some variables
String subjectName;
public CurriculumSubject (final JReport frame){
MigLayout layout = new MigLayout("wrap 2");//, debug 4000");
this.setLayout(layout);
final JTextField [] textfields = new JTextField[15];
JButton [] buttons = new JButton[15];
for (int i=0;i<15;i++){
String content = "This is a test. " + i;
textfields[i] = new JTextField(content);
this.add(textfields[i], "width 500:700:1000");
buttons[i] = new JButton(">>>");
buttons[i].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
//Execute when button is pressed
String text = textfields[i].getText();
frame.finaltext.append(text);
}});
buttons[i].setPreferredSize(new Dimension(10,10));
this.add(buttons[i]);
}
}
}
答案 0 :(得分:0)
我不知道JReport是什么,但为什么不提供一个接受字符串的方法(或者创建一个提供此方法的JReport子类):
class ReportThingy extends JReport {
public void addText(String text) {
finaltext.append(text);
}
}
更新:
您似乎有许多小部件需要跟踪。我建议引入Model-View-Controller模式,以使您的应用程序更易于管理。在短期内,您可以尝试通过setter或构造函数参数使CurriculumSubject类可以使用finaltext小部件。
答案 1 :(得分:0)
好的,我想我理解你想要的东西。您应该将JTextArea定义为类变量,因此在一个表单对象中有一个实例,然后只需将文本附加到该对象。方法示例:
public class CurriculumSubject extends JPanel implements ActionListener {
private JTextArea mainArea = new JTextArea();
public CurriculumSubject(final JReport frame) {
MigLayout layout = new MigLayout("wrap 2");//, debug 4000");
this.setLayout(layout);
final JTextField[] textfields = new JTextField[15];
JButton[] buttons = new JButton[15];
for (int i = 0; i < 15; i++) {
String content = "This is a test. " + i;
textfields[i] = new JTextField(content);
this.add(textfields[i], "width 500:700:1000");
buttons[i] = new JButton(">>>");
buttons[i].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//Execute when button is pressed
String text = textfields[i].getText();
addTextToFinalArea(text);
}
});
buttons[i].setPreferredSize(new Dimension(10, 10));
this.add(buttons[i]);
}
}
public void addTextToFinalArea(String text) {
mainArea.append(text);
}
}
答案 2 :(得分:0)
我想知道编译器没有抱怨你的代码:你在匿名内部i
实现中使用了非最终局部变量ActionListener
。尝试将i
存储在最终变量中,并在内部类中使用该变量:
for (int i = 0; i < 15; i++) {
...
final int index = i;
buttons[i].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
//Execute when button is pressed
String text = textfields[index].getText();
frame.finaltext.append(text + "\n");
}});
...
}