Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.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 gui滑块时出现运行时错误_Java_Swing_User Interface_Runtime Error_Jslider - Fatal编程技术网

实现Java gui滑块时出现运行时错误

实现Java gui滑块时出现运行时错误,java,swing,user-interface,runtime-error,jslider,Java,Swing,User Interface,Runtime Error,Jslider,我第一次在这里发帖。我来这里有一段时间了,很喜欢读线程。我希望这里有人能帮我做一个学习Java的程序。程序调用以实现滑块来更改gui背景中的背景颜色。它可以很好地编译,但当我运行它时,会出现一些错误,我在代码末尾对此进行了注释 代码如下: import java.awt.*; import javax.swing.border.*; import javax.swing.event.*; import javax.swing.*; public class sliderDemo extend

我第一次在这里发帖。我来这里有一段时间了,很喜欢读线程。我希望这里有人能帮我做一个学习Java的程序。程序调用以实现滑块来更改gui背景中的背景颜色。它可以很好地编译,但当我运行它时,会出现一些错误,我在代码末尾对此进行了注释

代码如下:

import java.awt.*;
import javax.swing.border.*;
import javax.swing.event.*;
import javax.swing.*;


public class sliderDemo extends JFrame
{
private JSlider redSlider, greenSlider, blueSlider;
private JPanel labels, sliders, colors;
private JLabel redlabel,greenlabel, bluelabel, colorlabel; 
JTextArea colorPanel;

public sliderDemo()
{
setTitle("Slider Excercise");
setLayout(new BorderLayout(5, 5));

ChangeListener event = new eventListener();

colorlabel = new JLabel("Sliders to change colors:");
redlabel = new JLabel("Red slider");
greenlabel = new JLabel("Green slider");
bluelabel = new JLabel("Blue slider");

labels = new JPanel();
labels.setLayout(new GridLayout(3,1));
labels.add(redlabel);
labels.add(greenlabel);
labels.add(bluelabel);

redSlider = new JSlider(JSlider.HORIZONTAL, 0, 255, 0);
redSlider.addChangeListener(event);
redSlider.setMaximum(255);
redSlider.setPaintLabels(true);
redSlider.setPaintTicks(true);
redSlider.setMajorTickSpacing(25);
redSlider.setMinorTickSpacing(5);
redSlider.setPaintTrack(false);

greenSlider = new JSlider(JSlider.HORIZONTAL, 0, 255, 0);
greenSlider.addChangeListener(event);
greenSlider.setMaximum(255);
greenSlider.setPaintLabels(true);
greenSlider.setPaintTicks(true);
greenSlider.setMajorTickSpacing(25);
greenSlider.setMinorTickSpacing(5);
greenSlider.setPaintTrack(false);

blueSlider = new JSlider(JSlider.HORIZONTAL, 0, 255, 0);
blueSlider.addChangeListener(event);
blueSlider.setMaximum(255);
blueSlider.setPaintLabels(true);
blueSlider.setPaintTicks(true);
blueSlider.setMajorTickSpacing(25);
blueSlider.setMinorTickSpacing(5);
blueSlider.setPaintTrack(false);

sliders = new JPanel();
sliders.setLayout(new GridLayout(3,1)); 
sliders.add(colorlabel);
sliders.add(redSlider);
sliders.add(greenSlider);
sliders.add(blueSlider);

colorPanel = new JTextArea(10, 10);
colorPanel.setEditable(false);
colorPanel.setBackground(Color.WHITE);

colorPanel.add(sliders, BorderLayout.CENTER);
colorPanel.add(colors, BorderLayout.NORTH);
colorPanel.add(labels, BorderLayout.WEST);

colors = new JPanel(new BorderLayout(5, 5));
colors.add(colorlabel);
colors.add(colorPanel, BorderLayout.NORTH);
}

public static void main(String[] args)
{
JFrame myFrame = new sliderDemo();
myFrame.setSize(500, 500);
myFrame.setVisible(true);
myFrame.setLocationRelativeTo(null);
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public class eventListener implements ChangeListener
{
    public void stateChanged(ChangeEvent e)
    {
    int r = redSlider.getValue();
    int g = greenSlider.getValue();
    int b = blueSlider.getValue();
    colorPanel.setBackground(new Color(r, g, b));
    }
}
}

/*
Exception in thread "main" java.lang.NullPointerException
    at java.awt.Container.addImpl(Container.java:1090)
    at java.awt.Container.add(Container.java:966)
    at sliderDemo.<init>(sliderDemo.java:79)
    at sliderDemo.main(sliderDemo.java:89)
Press any key to continue . . .
import java.awt.*;
导入javax.swing.border.*;
导入javax.swing.event.*;
导入javax.swing.*;
公共类sliderDemo扩展了JFrame
{
私人JSlider红滑块、绿滑块、蓝滑块;
专用JPanel标签、滑块、颜色;
私人JLabel红色标签、绿色标签、蓝色标签、彩色标签;
JTextArea彩色面板;
公共幻灯片
{
setTitle(“滑块练习”);
setLayout(新边界布局(5,5));
ChangeListener事件=新的eventListener();
colorlabel=新的JLabel(“更改颜色的滑块:”);
redlabel=新的JLabel(“红色滑块”);
绿色标签=新的JLabel(“绿色滑块”);
bluelabel=新的JLabel(“蓝色滑块”);
标签=新的JPanel();
标签.setLayout(新的GridLayout(3,1));
标签。添加(红色标签);
标签。添加(绿色标签);
标签。添加(bluelabel);
redSlider=新的JSlider(JSlider.HORIZONTAL,0,255,0);
redSlider.addChangeListener(事件);
设置最大值(255);
redSlider.setPaintLabels(真);
redSlider.setPaintTicks(真);
红色滑块。setMajorTickSpacing(25);
红色滑块。setMinorTickSpacing(5);
redSlider.setPaintTrack(false);
greenSlider=新的JSlider(JSlider.HORIZONTAL,0,255,0);
greenSlider.addChangeListener(事件);
greenSlider.setMaximum(255);
greenSlider.setPaintLabels(真);
greenSlider.setPaintTicks(真);
绿色滑翔机设置主轨道间距(25);
绿色滑翔器设置最小间距(5);
greenSlider.setPaintTrack(假);
blueSlider=新的JSlider(JSlider.HORIZONTAL,0,255,0);
blueSlider.addChangeListener(事件);
blueSlider.setMaximum(255);
blueSlider.setPaintLabels(真);
blueSlider.setPaintTicks(真);
blueSlider.setMajorTickSpacing(25);
蓝色滑翔机设置最小间距(5);
blueSlider.setPaintTrack(假);
滑块=新的JPanel();
滑块.setLayout(新的GridLayout(3,1));
滑块。添加(彩色标签);
滑块。添加(红色滑块);
滑块。添加(绿色滑块);
滑块。添加(蓝色滑块);
colorPanel=新的JTextArea(10,10);
colorPanel.setEditable(假);
彩色面板。背景(颜色。白色);
添加(滑块、边框布局、中心);
颜色面板。添加(颜色,边框布局。北);
colorPanel.add(标签、边框布局.WEST);
颜色=新JPanel(新边框布局(5,5));
颜色。添加(颜色标签);
添加(colorPanel,BorderLayout.NORTH);
}
公共静态void main(字符串[]args)
{
JFrame myFrame=newsliderdemo();
myFrame.setSize(500500);
myFrame.setVisible(true);
myFrame.setLocationRelativeTo(空);
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
公共类eventListener实现ChangeListener
{
公共无效状态已更改(更改事件e)
{
int r=redSlider.getValue();
int g=greenSlider.getValue();
int b=blueSlider.getValue();
颜色面板。背景(新颜色(r、g、b));
}
}
}
/*
线程“main”java.lang.NullPointerException中出现异常
位于java.awt.Container.addImpl(Container.java:1090)
在java.awt.Container.add处(Container.java:966)
在sliderDemo(sliderDemo.java:79)
位于sliderDemo.main(sliderDemo.java:89)
按任意键继续。
  • 添加已初始化的
    j组件

  • 您试图将
    JPanel颜色
    添加到
    JTextArea
    (完全不存在)及其初始化
    colors=newjpanel(newborderlayout(5,5))位于下一代码行中

  • 重命名
    JTextArea颜色面板
    JTextArea文本区域

  • 然后您将错过第四个
    JPanel
    ,因为
    JTextArea colorPanel
    被称为
    textArea
    ,而
    JTextArea
    不是
    JPanel
    的容器,是为用户按键输入指定的


  • 由于mKorbel的答案尚未被勾选为解决方案,我将尝试使其更清楚(无论如何可能会迟到):

    排队

    colorPanel.add(sliders, BorderLayout.CENTER);
    colorPanel.add(colors, BorderLayout.NORTH);
    colorPanel.add(labels, BorderLayout.WEST);
    
    您可以将JPanel添加到用于彩色显示的文本区域(正如mKobel所提到的,您应该选择一个更好的名称)。拆下前面的“彩色面板”。这会将面板添加到主面板(如预期的那样)

    你也得搬家

    colors = new JPanel(new BorderLayout(5, 5));
    colors.add(colorlabel);
    colors.add(colorPanel, BorderLayout.NORTH);
    
    在第一个代码段前面,必须先实例化“颜色”,然后才能将其添加到布局中

    在这些更改之后,程序正在运行(我自己测试了它)。:)