import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class MyDrawPanel extends JPanel{
public void paintComponents(Graphics g){
g.setColor(Color.orange);
g.fillRect(20,50,100,100);
}
public static void main(String[] args){
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500, 500);
frame.getContentPane().add(paintComponents(g));
frame.setVisible(true);
}
}
我想我应该在frame.getContentPane().add(paintComponents(g));
中添加一些参数。
我查了Graphics
课,但我还是在努力学习。应该是什么参数?
答案 0 :(得分:3)
试试这个
public class MyDrawPanel extends JPanel{
MyDrawPanel()
{
setOpaque(true);
}
protected void paintComponent(Graphics g){
super.paintComponent(g);
g.setColor(Color.orange);
g.fillRect(20,50,100,100);
}
public static void main(String[] args){
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new MyDrawPanel());
frame.setBounds(10,10,500, 500);
frame.setVisible(true);
}
}
答案 1 :(得分:0)
我不是专家,但我认为你想要做的是从JFrame向你的内容窗格添加一个Canvas对象,然后在其上绘制一个Graphics对象。
答案 2 :(得分:0)
好的,这就是我想出来的:
public class MyDrawPanel extends JPanel
{
private static void createAndShowGUI()
{
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500, 500);
MyDrawPanel panel = new MyDrawPanel();
panel.setOpaque(true);
frame.getContentPane().add(panel);
frame.setVisible(true);
}
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(Color.orange);
g.fillRect(20,50,100,100);
}
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run()
{
createAndShowGUI();
}
});
}
}
注意:
您的行frame.getContentPane().add(paintComponents(g));
存在多个问题。你所说的是“在paintComponents
上调用g
的结果添加到内容窗格。g
来自哪里?在声明之前你不能使用变量。调用的结果是{ {1}}是paintComponents
,这意味着结果不能用作方法的参数。大概你有编译错误。
我将void
更改为paintComponents
。前者用于控制子组件的绘制,一般不应该被覆盖。
不应在主线程上创建Swing对象。对于初学者来说,细节很复杂(详细描述了here)。大多数情况下,您只需记住上面使用的paintComponent
模式。