滑块在Java Swing GUI中无法正常工作

时间:2014-06-03 18:45:26

标签: 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.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);
            }
        }
    }
}

2 个答案:

答案 0 :(得分:4)

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

使用适当的布局并重新设计您的应用程序。

值得一读A Visual Guide to Layout Managers

修改

答案 1 :(得分:1)

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

检查这些是否属实。

HTH。

相关问题