我有一个JPanel表单,其中包含一个JList和一些JButton。JPanel看起来像这样
当我单击Add List按钮时,会显示一个单独的JFrame表单。JFrame表单将如下所示
单击JFrame上的add按钮时,我需要将JTextfield(命名列表名)的值添加到上一个JPanel上的JList。我想知道如何将值从JFrame传递到JPanel?如有任何建议,将不胜感激。
下面是 JPanel 表单的代码(使用 Designer GUI)
package multimediaproject;
public class musicPlayerPanel extends javax.swing.JPanel {
public musicPlayerPanel() {
initComponents();
}
private void initComponents() {
//...here is the generated code by using designer GUI
}
// Variables declaration - do not modify
//..generated code
// End of variables declaration
}
这是JFrame表单的代码(使用设计器GUI)
package multimediaproject;
public class addListFrame extends javax.swing.JFrame {
public addListFrame() {
initComponents();
this.setLocation(515, 0);
setVisible(true);
}
private void initComponents() {
//..here is the generated code by using Designer GUI
}
private void addBtnActionPerformed(java.awt.event.ActionEvent evt){
//some validation
if(...)
{
//validation
}
else
{
//IF VALUE IS CORRECT, ADD the List Name JTextfield value to the JList on the previous JPanel
errorMessage.setText("");
}
}
public static void main(String args[]) {
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new addListFrame().setVisible(true);
}
});
}
// Variables declaration - do not modify
//....generated code
// End of variables declaration
}
“当我单击添加按钮时,将显示一个单独的jFrame表单。jFrame 包含一个 jTextfield 和一个提交按钮。
您是否认真地为JTextField
和JButton
创建了一个全新的JFrame
?!
你没听说过< code>JOptionPane吗?这正是你想要复制的。您需要的唯一代码是:
String s = JOptionPane.showInputDialog(component, message);
model.addElement(s);
第一行将涵盖自定义JFrame
的所有代码。
看看这个例子
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class JOPDemo extends JPanel {
JList list;
JButton button = new JButton("Add Name");
String name;
DefaultListModel model;
public JOPDemo() {
model = new DefaultListModel();
list = new JList(model);
setLayout(new BorderLayout());
add(list, BorderLayout.CENTER);
add(button, BorderLayout.SOUTH);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
name = JOptionPane.showInputDialog(this, "Enter a name");
model.addElement(name);
}
});
}
public Dimension getPreferredSize() {
return new Dimension(300, 300);
}
private static void createAndShowGui() {
JFrame frame = new JFrame();
frame.add(new JOPDemo());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
编辑
你能做的就是拥有一个内部类,也就是你的JFrame。就我个人而言,我会选择JDialog。
来自评论:将框架作为主类的内部类。这样,它可以访问主类中的所有变量。在GUI类中也可以有一个字符串listName。在另一个框架中,当您单击add时,它将在GUI类中设置listName,然后将其添加到列表中。
public class GUI {
String listName;
JList list;
InnerFrame inner = new InnerFrame();
private class InnerFrame extends JFrame {
JButton addButton;
}
}
好的。如果我理解你的问题,这很容易。步骤1:为JList对象引用创建setter和getter。第2步:点击按钮,打开新的JFrame时,将面板引用传递给继承JFrame的类的构造函数。步骤3:通过这样做,您可以在面板引用上调用getter方法。第4步:现在您有了JList的引用,按您的要求执行。
我希望这是解决你问题的最好办法
用您的代码更新。
您可以利用Property tyChangeListener
和Property tyChangeSupport
(该类实现了观察者模式)。
我给你举个例子作为指导:
public class MusicPlayerPanel extends JPanel {
private JList list;
private JButton addButton;
private PropertyChangeListener listener = new MyPropertyChangeListener();
//..in some place
addButton.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
JFrame form = new FrameForm();
form.addPropertyChangeListener(FrameForm.BUTTON_CLICKED,listener);
form.setVisible(true);
}
});
//in another place
private class MyPropertyChangeListener implements PropertyChangeListener{
@Override
public void propertyChange(PropertyChangeEvent evt){
if(evt == null)
return;
if(evt.getPropertyName().equals(FrameForm.BUTTON_CLICKED)){
String value = (String) evt.getNewValue();
((DefaultListModel)list.getModel()).addElement(value);
}
}
}
}
框架形式如下:
public class AddListFrame extends JFrame{
private JTextField textfield;
private JButton submitButton;
public static final String BUTTON_CLICKED ="buttonClicked";
// in some place
submitButton.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent evt){
firePropertyChange(BUTTON_CLICKED,null,textfield.getText());
}
});
}
注意:按照惯例,在java中,类以大写开头,并遵循驼峰样式。这对于可读性非常重要。
我得到了这个错误: “变量'a'已赋值,但其值永远不可用”
问题内容: 我有一个调用会弹出一个的,以便用户可以选择目录。这些都是单独的类。从中传递值的正确方法是什么,以便我可以在中显示目录的路径? 编辑:更新了问题。 问题答案: 这是一个不完整的示例,但我想可以使您了解如何实现所需的目标。重要的一点是引用要在其中进行选择的属性,例如 参见下面如何将其放置在代码中: 希望对您有所帮助,对不起您没有提供完整的示例。 编辑 本质上,我们没有将任何参数传递给Abs
可以在多个类之间传递数据吗? 我试图实现的是“一个类设置某个类的值,另一个类访问它”(java初学者)
我正在创建一个支持多重选择的QML,并将在我的应用程序中实例化其中的多个。我需要将键盘焦点赋予特定列表,处理该列表的按键,并根据焦点为选定的行绘制高亮显示。 但是,将赋予ListView委托或ListView本身并不会导致在ListView上出现,也不会导致触发按键信号。 我创建了一个简单的示例应用程序,展示了我的问题: 单击任一列表都不会将选定的行变成粉红色,按上/下键也不会调整选定内容。 如何
如何从secondactivity.java中的包到fragment_2.java文件中获取值?
我有两项活动。两者都已实现surfaceview。在第一个活动中,我有一个名为score1的变量,我想将score1中的值传递给第二个活动。 每次我运行应用程序时,它在完成第一个活动后崩溃,并尝试加载第二个活动。在我编写代码以获取第二个活动中的额外意图之前,一切都很好。 我的第一个活动有这样的意图: 在我的第二个活动中,以下代码试图获取score1变量的值: 我不明白为什么每次activity o