我正在尝试构建一个简单的椭圆滑块程序。 我将窗口的背景颜色设为橙色,但它没有将背景设置为橙色,而是将背景设置为灰色。此外,滑块不能通过适当的值。因为当我滑动以增加椭圆的大小时,它会变成一种奇怪的形状,分散其原始的椭圆形状。
这是我的完整代码:
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();
}
}
答案 0 :(得分:2)
因为您致电super.paintComponents(g);
而不是super.paintComponent(g)
...而不是方法名称末尾的s
...
此外,我不确定您的想法getPreferredDim
和getMinSize
会做什么,但他们不会被Swing中的任何API调用,我想你的意思是{{ 1}}和getPreferredSize
布局管理器将使用它来更好地决定如何布局组件