java - 在新的 JFrame 中添加 JTextField

标签 java swing jframe jpanel jtextfield

我有一个带有 JButtonJFrame ,这个按钮打开一个新的 JFrame ,其中应该有一个文本框( JTextField ),我将用于搜索,问题是我不知道如何插入它。我想出了这个:

N.B 我是初学者,对于这个简单的问题提前抱歉 :)

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;


public class MainWindow {




// Seconda Finestra
public static void NuovaFinestra (JPanel panel) {

    panel.setLayout(null);



    JButton Ricerca = new JButton("Ricerca");
    Ricerca.setBounds(100, 100, 200, 50);
    panel.add(Ricerca);


    Ricerca.addActionListener(new ActionListener(){
         public void actionPerformed(ActionEvent e) {
             JFrame FinestradiRicerca = new JFrame("Finestra di Ricerca");
             FinestradiRicerca.setBounds(300, 300, 500, 500);

             FinestradiRicerca.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
             JPanel riquadroRicerca = new JPanel();
             FinestradiRicerca.add(riquadroRicerca);
             FinestradiRicerca.setVisible(true);
             JTextField ciao;
                ciao = new JTextField ();
                 }
    });

}




//Main  
public static void main(String[] args) {

    //Finestra Principale
    JFrame finestra = new JFrame("Finestra principale");
    finestra.setSize(500, 500);
    finestra.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


//JPanel della finestra principale
    JPanel riquadro = new JPanel();
    finestra.add(riquadro);
    finestra.setVisible(true);

    NuovaFinestra(riquadro);

}





}

最佳答案

在将面板添加到 FinestradiRicerca 之前,您需要将新元素添加到 riquadroRicerca,我建议您不要使用 null 布局,而是使用Layout Manager或它们的组合。如果您坚持保留空布局,请参见下面的示例。但对于这种应用程序,我建议 CardLayout .

我还建议不要使用多个 JFrames,因为它们会在任务栏上打开多个窗口,这对用户不友好。请参阅:Use of multiple JFrames, Good / Bad Practice

作为旁注,请关注 Java naming conventions .例如,您将 JFrame 称为 FinestradiRicerca,而不是将其重命名为:finestradiRicerca(变量 的第一个字母小写).

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class MainWindow {
    // Seconda Finestra
    public static void NuovaFinestra (JPanel panel) {
        panel.setLayout(null);
        JButton Ricerca = new JButton("Ricerca");
        Ricerca.setBounds(100, 100, 200, 50);
        panel.add(Ricerca);
        Ricerca.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                JFrame FinestradiRicerca = new JFrame("Finestra di Ricerca");
                FinestradiRicerca.setBounds(300, 300, 500, 500);
                //If you don't want to close whole app when closing this windo change it to: JFrame.DISPOSE_ON_CLOSE
                FinestradiRicerca.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                JPanel riquadroRicerca = new JPanel();
                JTextField ciao;
                JLabel myLabel = new JLabel("Here goes your label text");
                ciao = new JTextField ();
                ciao.setColumns(20);
                riquadroRicerca.add(myLabel);
                riquadroRicerca.add(ciao);
                FinestradiRicerca.add(riquadroRicerca);
                FinestradiRicerca.setVisible(true);
            }
        });
    }

    //Main  
    public static void main(String[] args) {
        //Finestra Principale
        JFrame finestra = new JFrame("Finestra principale");
        finestra.setSize(500, 500);
        finestra.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //JPanel della finestra principale
        JPanel riquadro = new JPanel();
        finestra.add(riquadro);
        finestra.setVisible(true);
        NuovaFinestra(riquadro);
    }
}

因此,为了使 JLabelJTextField 可见,您的代码经过一些修改后会产生以下输出:

enter image description here

但是,请遵循我上面的建议。

关于java - 在新的 JFrame 中添加 JTextField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32698889/

相关文章:

java - Eclipse 风格的 JTabbedpane

java - 平滑组件在修改或循环后自动刷新(ex : timer)

java - 无需编码的数据映射

java - spring boot 向环境添加另一个属性文件

java - 如何遍历JSON文件?

java - 如何不断地显示形状,但仍然重新绘制屏幕?

Java Swing : Access panel components from another class

java - 这些 "if statements"可以简化吗?

java - MidiSystem.getReceiver() 卡住 JFrame

java - 在外部单击时自动关闭 JFrame 窗口