我试图在框架上绘制一个简单的矩形,带有一些滚动条和文本字段(只是测试),但是paintComponent没有显示,我在这里看到了一些类似的情况,但是我无法设法让它工作,请帮忙吗?
package appletdeslizadores;
import java.awt.*;
import javax.swing.*;
public class frame extends JPanel {
JFrame f1;
JPanel p1, p2;
JLabel lbl1, lbl2, lbl3;
JTextField txtfld1, txtfld2, txtfld3;
JScrollBar sbar1, sbar2, sbar3;
public frame() {
f1 = new JFrame("Applet ScrollBars");
f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f1.setSize(380, 350);
f1.setLayout(new FlowLayout());
p1 = new JPanel(new GridLayout(3,3,10,10));
lbl1 = new JLabel("Scroll Bar 1");
lbl2 = new JLabel("Scroll Bar 2");
lbl3 = new JLabel("Scroll Bar 3");
sbar1 = new JScrollBar(JScrollBar.HORIZONTAL, 0, 10, 0, 255);
sbar2 = new JScrollBar(JScrollBar.HORIZONTAL, 0, 10, 0, 255);
sbar3 = new JScrollBar(JScrollBar.HORIZONTAL, 0, 10, 0, 255);
txtfld1 = new JTextField(3);
txtfld1.setText(String.valueOf(sbar1.getValue()));
txtfld1.setEditable(false);
txtfld2 = new JTextField(3);
txtfld2.setText(String.valueOf(sbar2.getValue()));
txtfld2.setEditable(false);
txtfld3 = new JTextField(3);
txtfld3.setText(String.valueOf(sbar3.getValue()));
txtfld3.setEditable(false);
p1.add(lbl1);
p1.add(lbl2);
p1.add(lbl3);
p1.add(sbar1);
p1.add(sbar2);
p1.add(sbar3);
p1.add(txtfld1);
p1.add(txtfld2);
p1.add(txtfld3);
f1.add(p1);
f1.setVisible(true);
}
public void paintComponent(Graphics2D g) {
g.drawRect(50,50,70,100);
g.setColor(Color.red);
}
public static void main(String[] args) {
new frame();
}
}
答案 0 :(得分:0)
你并不坚持惯例。这导致了小错误的问题。您的frame
课程实际上是JPanel
,而不是JFrame
。
有两个主要问题:您从未将面板添加到框架中,paintComponent()
方法具有Graphics对象,而不是Graphics2D
对象作为参数。
您的代码更改位于此答案的底部。
@Override
注释添加到paintComponent()
方法,因为您希望从原始{{1}覆盖此方法}。如果由于注释而崩溃,则表示您没有正确覆盖。JPanel
参数从paintComponent()
更改为Graphics2D
。Graphics
添加到JPanel
。JFrame
上的setPreferredSize()
并指定尺寸。JPanel
之前调用pack()
,然后再将其显示,以便布局管理员可以相应地放置所有内容。现在我确定在这一切结束时你仍然不会对你看到的内容感到满意,因为代码仍然需要一些工作,但至少这应该可以帮助你提升正确的方向。此外,您可能希望在绘制矩形之前调用JFrame
。 ;)
希望这会有所帮助。
setColor()