【问题标题】:Add JTextField in A new JFrame在新的 JFrame 中添加 JTextField
【发布时间】:2015-12-18 08:52:22
【问题描述】:

我有一个 JFrame 和一个 JButton ,这个按钮会打开一个新的 JFrame ,其中应该有一个文本框 (JTextField ),我将用于搜索,问题是我没有不知道怎么插入。我想出了这个:

注意,我是初学者,对于这个简单的问题,我很抱歉 :)

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);

}





}

【问题讨论】:

  • 1) 你永远不会在任何东西上添加 ciao,这就是原因。 2)不要使用空布局,而是看一下布局管理器。 3) 使用多个 JFrames 并不是很好的做法 4) 请看一下 Java 代码约定(添加组件后还要加上setVisible(boolean)

标签: java swing jframe jpanel jtextfield


【解决方案1】:

在将面板添加到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 可见,输出如下:

但是,请按照我的上述建议。

【讨论】:

    【解决方案2】:

    像这样将JTextField 添加到您的新JFrame。您还必须初始化您的文本字段。这与您对初始 JFrame 所做的基本相同。

    JTextField ciao = new JTextField();
    FinestradiRicerca.add(ciao);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-10
      • 2013-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-16
      • 1970-01-01
      • 2012-10-23
      相关资源
      最近更新 更多