类 的组合

Combinations of Classes

Hey everyone, I want to combine my classes and get it in only one frame. Now I have 2 classes and I don't know how to group them. The JSlider.

    public class JSliderExample extends JFrame {
    JSlider jsHorizontal;
    JTextField jtf1;

    public JSliderExample() {

        jsHorizontal = new JSlider(JSlider.HORIZONTAL, 0, 100, 50);


    jtf1 = new JTextField(15);
        jtf1.setEditable(false);
        jtf1.setText("Horizontal value is " + jsHorizontal.getValue());

        JPanel panel = new JPanel();
        panel.setBackground(Color.WHITE);
        panel.add(jsHorizontal);
        panel.setBackground(Color.WHITE);
        panel.add(jtf1);
        panel.setBackground(Color.WHITE);


        getContentPane().add(panel, BorderLayout.CENTER);
        getContentPane().add(panel, BorderLayout.SOUTH);


        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(300, 400, 400, 300);
        setVisible(true);
        setBackground(Color.WHITE);
    }

    class JSliderHandler implements ChangeListener {
        public void stateChanged(ChangeEvent ce) {
            jtf1.setText("value is " + jsHorizontal.getValue());

        }
    }

And there are my buttons

.

    public void createGUI() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JPanel panel = new JPanel();
    panel.setLayout(new FlowLayout());


    JButton button2 = new JButton("PLAY");
    button2.setActionCommand("Button PLAY was pressed!");
            panel.add(button2);



    textField = new JTextField();
    textField.setColumns(23);
    panel.add(textField);

    ActionListener actionListener = new TestActionListener();

    button1.addActionListener(actionListener);
    button2.addActionListener(actionListener);

    button3.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            textField.setText(e.getActionCommand());
        }
    });

    getContentPane().add(panel);
    setPreferredSize(new Dimension(320, 100));
}

  public class TestActionListener implements ActionListener {
    public void actionPerformed(ActionEvent e) {
        textField.setText(e.getActionCommand());
    }
}

In the end of programm I see 2 frames that consist of 2 classes.

public static void main(String[] args) {
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {

            TestFrame frame = new TestFrame();
            frame.pack();
          JSliderExample frame1 = new JSliderExample();

            frame.setLocationRelativeTo(null);

            frame.setVisible(true);





        }

    });

如果您不想看到 2 个 JFrames,则不要创建 2 个 JFrames。为什么不使用上面的所有 类 而不是 JFrames 创建 JPanel,然后在您的 main 方法中,将您的 JPanel 添加到在 main 中创建的 JFrame。简单。

因此,例如,不要让 JSliderExample 扩展 JFrame,而是将其名称更改为 SliderPanel 并让它扩展 JPanel,对于您的 JButton 程序也是如此。那么您的主要方法可能类似于:

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            // your JSlider example class **that extends JPanel**
            SliderPanel sliderPanel = new SliderPanel();

            // your JButton example class **that extends JPanel**
            ButtonPanel buttonPanel = new ButtonPanel():

            JFrame frame = new JFrame("My GUI");
            frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            frame.add(sliderPanel, BorderLayout.PAGE_START);
            frame.add(buttonPanel, BorderLayout.CENTER);
            frame.pack();
            frame.setLocationRelativeTo(null); // center GUI if you want
            frame.setVisible(true);
        }

    });
}