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

标签 java swing user-interface slider jpanel

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

这是我的完整代码:

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

    }

}

最佳答案

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

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

关于java - 为什么 setBackground 方法无法设置 JPanel 的背景?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26171201/

相关文章:

java - 如何使用 float 图标将所有复选框值返回到字符串

java - 为什么JFrame无法显示任何形状?

javascript - 在kinetic js中重用canvas代码

Java Swing JTextPane text/html 不支持禁用属性

java - 在不使文本变灰的情况下在 JTextField 中设置文本颜色

xml - 如何将工具提示添加到我的自定义 Excel 功能区 UI?

android - 我如何在android studio中写一个分数

Java JPA 和 Java JDBC 对于同一 MySQL 查询返回不同的结果

java - 什么时候应该在我的 ColdFusion 应用程序中使用 Java?

java简单的神经网络设置