为什么setBackground方法无法设置我的JPanel的背景?

时间:2014-10-02 23:29:27

标签: java swing user-interface slider jpanel

我正在尝试构建一个简单的椭圆滑块程序。 我将窗口的背景颜色设为橙色,但它没有将背景设置为橙色,而是将背景设置为灰色。此外,滑块不能通过适当的值。因为当我滑动以增加椭圆的大小时,它会变成一种奇怪的形状,分散其原始的椭圆形状。

这是我的完整代码:

package drawoval;

import java.awt.Color;
import javax.swing.JFrame;

public class Drawoval {

    public static void main(String[] args) {

        TheWindows tw=new TheWindows();
        tw.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        tw.setSize(230,280);
        tw.setVisible(true);

    }


}



package drawoval;

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

import javax.swing.event.*;

public class TheWindows extends JFrame{
   private JSlider slider;
   private Oval myPanel;


    public TheWindows(){
       super("The title");
       myPanel=new Oval();
       myPanel.setBackground(Color.ORANGE);
       slider=new JSlider(SwingConstants.HORIZONTAL,0, 200,10);
       slider.setMajorTickSpacing(10);
       slider.setPaintTicks(true);
       slider.addChangeListener(
       new ChangeListener(){
           public void stateChanged(ChangeEvent e){
               myPanel.setNewD(slider.getValue());

           }

       }

       );
       add(slider,BorderLayout.SOUTH);
       add(myPanel,BorderLayout.CENTER);

    }



}



package drawoval;

import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JPanel;

public class Oval extends JPanel {

    private int d = 10;

    public void paintComponent(Graphics g) {
        super.paintComponents(g);
        g.fillOval(10, 10, d, d);

    }

    public void setNewD(int newD) {
        d = (newD >= 0 ? newD : 10);
        repaint();

    }

    public Dimension getPreferredDim() {

        return new Dimension(200, 280);

    }

    public Dimension getMinSize() {
        return getPreferredDim();

    }

}

1 个答案:

答案 0 :(得分:2)

因为您致电super.paintComponents(g);而不是super.paintComponent(g) ...而不是方法名称末尾的s ...

此外,我不确定您的想法getPreferredDimgetMinSize会做什么,但他们不会被Swing中的任何API调用,我想你的意思是{{ 1}}和getPreferredSize布局管理器将使用它来更好地决定如何布局组件