当前位置: 首页 > 知识库问答 >
问题:

如何将不同的swing项从另一个类包含到主类

周锐
2023-03-14

我对Java很陌生。我创建了一个带有jlabel和JTextField的GUI窗口。但是最近,对于一个项目,我需要用这些jlabel和jtextfield创建另一个类,并且需要将它们显示到main class。但我不知道怎么做。我看过这篇教程,但它只涉及jmenu(而不是jtext字段和jlabel)。

从另一个类添加Swing组件

我的代码在下面,

公共类common_items扩展了JFrame{public void item_gui(String labelForMatrix){

    JPanel contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    contentPane.setLayout(null);

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 450, 300);


  JLabel lbl = new JLabel(labelForMatrix);
    lbl.setBounds(5, 5, 424, 14);
    lbl.setHorizontalAlignment(SwingConstants.CENTER);
    contentPane.add(lbl);

    JTextField txt2 = new JTextField();
    txt2.setBounds(178, 117, 86, 20);
    contentPane.add(txt2);
    txt2.setColumns(10);

    JTextField txt1 = new JTextField();
    txt1.setColumns(10);
    txt1.setBounds(178, 64, 86, 20);
    contentPane.add(txt1);

    JLabel lblRowNumber = new JLabel("Row number");
    lblRowNumber.setBounds(189, 39, 67, 14);
    contentPane.add(lblRowNumber);

    JLabel lblColumnNumber = new JLabel("column number");
    lblColumnNumber.setBounds(155, 95, 119, 14);
    contentPane.add(lblColumnNumber);
     }
   }

我曾尝试将它们显示到主类,但失败了。我的主类代码在下面

    common_items itm=new common_items();
    itm.item_gui();

我建议我该怎么做。

共有1个答案

党博超
2023-03-14

如果我正确理解了您要做的事情,您正在尝试创建一个主JFrame类,该类包含其他类的组件,如JLabelJTextArea,这些组件连接到类并将它们用作普通组件。

因此,您需要做的只是创建一个主类(而不是JFrame)并创建一个JFrame类(例如,称之为大型机),然后创建components类(例如,textArea JLabel...)并将这些类表示为frame类中的变量(我们将从主类执行)。

也许你只是对代码的理解比对语言的理解更好:

启动程序的Main类(加载包含所有内容的frame类)

public class Main {

    public Main(){
        //execute the frame
        new Frame();
    }

    public static void main(String[] args) {
        new Main(); //execute the function that launches the JFrame
    }

}

Frame类,它(显然)包含帧

导入javax.swing.jframe;

public class Frame extends JFrame{

    private static final long serialVersionUID = -5151041547543472432L; //ignore this it is just the serial id of the JFrame you can omit this line from your code

    ComponentsStorage cs = new ComponentsStorage(); //display class as variable so we can use it more efficnent 

    public Frame(){
        launch(); //execute function
    }

    public void launch() { //launch
        setTitle("Frame Demo");//title
        setSize(640, 480);//size (width * height)
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//close when close button is pressed

        //you can just do ComponentStorage.tf.blah blah blah... but it is much easier as a variable
        cs.label.setSize(500, 500); // you can mess up witht the components you stored there
        cs.tf.setSize(40, 5); //as you can see here I am just adding the components by 

        //add them here
        add(cs.label);
        add(cs.tf);

        setLocationRelativeTo(null);//by setting this you place the screen always in the middle of the screen
        setVisible(true);//there is no point of creating JFrames if they aren't visible
    }

}

另一个类存储组件(JLabel、jtextfield...)您想要使用的(它可以是任何只包含这些内容的类,即使其中有其他函数,我将其命名为ComponentStorage)

import javax.swing.JTextField;
import javax.swing.JLabel;

public class ComponentsStorage {

    JLabel label = new JLabel();
    JTextField tf = new JTextField();

}
 类似资料: