Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
滑块在Java Swing GUI中工作不正常_Java_Swing_Null Layout Manager - Fatal编程技术网

滑块在Java Swing GUI中工作不正常

滑块在Java Swing GUI中工作不正常,java,swing,null-layout-manager,Java,Swing,Null Layout Manager,虽然用于生成滑块的语句已放入代码中,但滑块不会出现在GUI中。要使滑块显示在GUI中,我必须修改或添加哪些代码?除滑块外,程序中定义的所有其他Swing组件都将显示 package pkTopic5T15; import javax.swing.*; import java.awt.Color; import java.awt.Font; import java.awt.event.*; import javax.swing.event.ChangeEvent; import javax.sw

虽然用于生成滑块的语句已放入代码中,但滑块不会出现在GUI中。要使滑块显示在GUI中,我必须修改或添加哪些代码?除滑块外,程序中定义的所有其他Swing组件都将显示

package pkTopic5T15;

import javax.swing.*;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class Topic5T15 {
    public int top1 = 60;
    public int top2 = 300;
    public JPanel pnlLeft;
    public JPanel pnlRight;
    public int Initialht1 = 100;
    public int Initialht2 = 100;
    public JSlider sldChangePanels;

    public static void main(String[] args) {
        Topic5T15 My515 = new Topic5T15();
        My515.go();
    }

    public void go() {
        GUI515 My515 = new GUI515();
    }

    class GUI515 extends JFrame {
        private JLabel lblHeading;
        private JButton btnPanLeft;
        private JButton btnPanRight;
        public int ht1;
        public int ht2;

        protected GUI515() {
            this.setSize(800, 900);
            this.setLocation(100, 100);
            this.setTitle("515");
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setLayout(null);
            Font f1 = new Font("Monospaced", Font.BOLD, 16);
            Font f2 = new Font("Dialog", Font.BOLD, 24);
            lblHeading = new JLabel("Testing    Panels");
            lblHeading.setBounds(10, 10, 300, 50);
            lblHeading.setFont(f2);
            pnlLeft = new JPanel();
            pnlLeft.setLayout(null);
            pnlLeft.setBounds(10, top1, 300, Initialht1);
            pnlLeft.setBackground(Color.RED);
            btnPanLeft = new JButton("One");
            btnPanLeft.setFont(f1);
            btnPanLeft.setBounds(0, 0, 100, 50);
            ClickOne c = new ClickOne();
            btnPanLeft.addActionListener(c);
            pnlLeft.add(btnPanLeft);
            this.add(pnlLeft);
            pnlRight = new JPanel();
            pnlRight.setLayout(null);
            pnlRight.setBounds(350, top2, 300, Initialht2);
            pnlRight.setBackground(Color.GREEN);
            btnPanRight = new JButton("Two");
            btnPanRight.setBounds(0, 0, 100, 50);
            btnPanRight.setFont(f1);
            btnPanRight.addActionListener(c);
            pnlRight.add(btnPanRight);
            this.add(pnlRight);
            sldChangePanels = new JSlider(-100, 100, 1);
            sldChangePanels.setBounds(50, 800, 400, 50);
            sldChangePanels.setMajorTickSpacing(20);
            sldChangePanels.setPaintLabels(true);
            SliderListener slis = new SliderListener();
            sldChangePanels.addChangeListener(slis);
            this.add(sldChangePanels);
            this.add(lblHeading);
            this.setVisible(true);
        }

        private class ClickOne implements ActionListener
        // This is an inner class; contained within GUI
        {
            protected ClickOne() {
            }

            public void actionPerformed(ActionEvent e) {
                if (e.getSource() == btnPanLeft) {
                    btnPanLeft.setText("OUCH1");
                    top1 = top1 + 20;
                    pnlLeft.setBounds(10, top1, 300, 100);
                }
                if (e.getSource() == btnPanRight) {
                    btnPanRight.setText("OUCH2");
                    top2 = top2 - 20;
                    pnlRight.setBounds(350, top2, 300, 100);
                }
            }
        }

        private class SliderListener implements ChangeListener
        // This is an inner class; contained within GUI
        {
            protected SliderListener() {
            }

            public void stateChanged(ChangeEvent e) {
                ht1 = Initialht1 + sldChangePanels.getValue();
                ht2 = Initialht2 - sldChangePanels.getValue();
                pnlLeft.setBounds(10, top1, 300, ht1);
                pnlRight.setBounds(350, top2, 300, ht2);
            }
        }
    }
}

根本不使用
null
布局(如果使用),然后为代码中缺少的滑块的每个组件设置边界。这就是滑块不出现的原因

使用正确的布局并再次重新设计应用程序

它值得一读

编辑
  • 使用
    SwingUtilities.invokeLater()
    确保正确初始化

    阅读更多


通过GUI编程,很多时候,元素被渲染但看不见。例如,它们在屏幕外部渲染,或在窗口的可见部分外部渲染,或渲染但被其他元素隐藏,或以零大小渲染

检查这些是否对您是正确的