【问题标题】:Why setBackground method can't set the background of my JPanel?为什么 setBackground 方法不能设置我的 JPanel 的背景?
【发布时间】:2014-10-02 23:29:27
【问题描述】:

我正在尝试构建一个简单的椭圆滑块程序。 我将窗口的背景颜色设为橙色,但它没有将背景设置为橙色,而是灰色背景。此外,滑块无法传递适当的值。因为当我滑动增加椭圆的大小时,它变成了一个奇怪的形状,分散了它原来的椭圆形状。

这是我的完整代码:

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();

    }

}

【问题讨论】:

    标签: java swing user-interface slider jpanel


    【解决方案1】:

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

    另外,我不确定您认为 getPreferredDimgetMinSize 会做什么,但它们不会被 Swing 中的任何 API 调用,我认为您的意思是 getPreferredSizegetMinimumSize 将是布局管理器使用它来更好地决定如何布局组件

    【讨论】:

    • MadProgrammer,我迫不及待地想接受你的回答!但只剩下几分钟来接受它。非常感谢你,现在就睡觉,但明天接受。
    猜你喜欢
    • 2021-08-13
    • 2021-10-31
    • 2012-04-26
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多