Java 实现图形 g?
Java implementing graphics g?
第一个Java项目所以这个问题可能很业余。
我正在尝试 运行 方法 paintComponent 在 class 中绘制形状,它扩展了 JFRAME 我只是不知道如何调用它。我是否需要创建一个图形变量作为背景,以便调用 paintComponent(background)?
或者也许是一个新的 Planel?
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.Graphics.*;
import java.awt.event.*;
import java.text.*;
public class Pythag extends JFrame implements ActionListener
{
JTextField text1,text2;
JLabel label1,label2,label3;
JButton buttonC;
public Pythag(){
super ("Pythagorean Theorem");
// Set up the frame
this.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
this.setBounds (300, 300, 200, 350);
//creating objects
JPanel boxY = new JPanel ();
boxY.setLayout(new BoxLayout(boxY,BoxLayout.Y_AXIS));
label1 = new JLabel ("A side length",JLabel.CENTER);
label2 = new JLabel ("B side length",JLabel.CENTER);
label3 = new JLabel ("Type in side lengths to calculate hypotenuse",JLabel.CENTER);
buttonC = new JButton ("Button1");
text1 = new JTextField (10);
text2 = new JTextField (10);
//Nestled flow layouts:
//layout1
JPanel line = new JPanel();
line.add(label1);
line.add(text1);
boxY.add(line);
//layout2
JPanel line2 = new JPanel();
line2.add(label2);
line2.add(text2);
boxY.add(line2);
//layout 3
JPanel line3 = new JPanel();
line3.add(label3);
boxY.add(line3);
//layout 4
JPanel line4 = new JPanel();
line4.add(buttonC);
boxY.add(line4);
//Adding listeners
buttonC.addActionListener (this);
text1.addActionListener (this);
text2.addActionListener (this);
//Setting up
this.setContentPane (boxY);
this.setVisible (true);
this.setSize(450,200);
// this.add(panel);
// Graphics bg = backbuffer.getGraphics();
}
public void actionPerformed (ActionEvent e)
{
if (e.getSource () == buttonC)
{
calculate();
}
}
public void calculate(){
double a,b;
DecimalFormat Formatter = new DecimalFormat("#0.00");
try
{
a = Double.parseDouble (text1.getText());
b = Double.parseDouble (text2.getText());
double hypot=Math.sqrt(a*a + b*b);
label3.setText("The length of the hypotenuse is: " + Formatter.format(hypot));
}
catch (NumberFormatException ex)
{
label3.setText("You're clearly a confused, please use NUMBERS for side lengths.");
}
}
public void paintComponent(Graphics g){
super.paintComponent(g);
g.fillRect(100,100,20,20);
}
public static void main (String[] args)
{
new Pythag ();
} // main method
}
如果您确实想覆盖 paint()
,则仅覆盖顶级容器,请参阅 this 以获得更完整的解释。不过,"cleanest" 方法是创建一个新的 class,它扩展 JPanel
并覆盖 paintComponent()
。如果你想在运行时重新绘制面板,你可以调用repaint()
。这是一个例子:
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.Graphics.*;
import java.awt.event.*;
import java.text.*;
import java.util.Random;
public class Pythag {
public Pythag() {
JFrame frame = new JFrame("JFrame");
frame.setContentPane(new MyPanel());
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setSize(500, 500);
frame.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new Pythag();
}
});
}
public class MyPanel extends JPanel {
int x;
int y;
public MyPanel() {
ActionListener al = new ActionListener() {
Random r = new Random();
@Override
public void actionPerformed(ActionEvent e) {
x = r.nextInt(getWidth()); // Random x-coordinate
y = r.nextInt(getHeight()); // Random y-coordinate
repaint(); // Repaints the panel
}
};
Timer timer = new Timer(500, al); // Runs ever 500 milliseconds.
timer.start();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g); // Removes previous drawings
g.setColor(Color.RED);
g.fillRect(x, y, 10, 10);
}
}
}
第一个Java项目所以这个问题可能很业余。 我正在尝试 运行 方法 paintComponent 在 class 中绘制形状,它扩展了 JFRAME 我只是不知道如何调用它。我是否需要创建一个图形变量作为背景,以便调用 paintComponent(background)? 或者也许是一个新的 Planel?
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.Graphics.*;
import java.awt.event.*;
import java.text.*;
public class Pythag extends JFrame implements ActionListener
{
JTextField text1,text2;
JLabel label1,label2,label3;
JButton buttonC;
public Pythag(){
super ("Pythagorean Theorem");
// Set up the frame
this.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
this.setBounds (300, 300, 200, 350);
//creating objects
JPanel boxY = new JPanel ();
boxY.setLayout(new BoxLayout(boxY,BoxLayout.Y_AXIS));
label1 = new JLabel ("A side length",JLabel.CENTER);
label2 = new JLabel ("B side length",JLabel.CENTER);
label3 = new JLabel ("Type in side lengths to calculate hypotenuse",JLabel.CENTER);
buttonC = new JButton ("Button1");
text1 = new JTextField (10);
text2 = new JTextField (10);
//Nestled flow layouts:
//layout1
JPanel line = new JPanel();
line.add(label1);
line.add(text1);
boxY.add(line);
//layout2
JPanel line2 = new JPanel();
line2.add(label2);
line2.add(text2);
boxY.add(line2);
//layout 3
JPanel line3 = new JPanel();
line3.add(label3);
boxY.add(line3);
//layout 4
JPanel line4 = new JPanel();
line4.add(buttonC);
boxY.add(line4);
//Adding listeners
buttonC.addActionListener (this);
text1.addActionListener (this);
text2.addActionListener (this);
//Setting up
this.setContentPane (boxY);
this.setVisible (true);
this.setSize(450,200);
// this.add(panel);
// Graphics bg = backbuffer.getGraphics();
}
public void actionPerformed (ActionEvent e)
{
if (e.getSource () == buttonC)
{
calculate();
}
}
public void calculate(){
double a,b;
DecimalFormat Formatter = new DecimalFormat("#0.00");
try
{
a = Double.parseDouble (text1.getText());
b = Double.parseDouble (text2.getText());
double hypot=Math.sqrt(a*a + b*b);
label3.setText("The length of the hypotenuse is: " + Formatter.format(hypot));
}
catch (NumberFormatException ex)
{
label3.setText("You're clearly a confused, please use NUMBERS for side lengths.");
}
}
public void paintComponent(Graphics g){
super.paintComponent(g);
g.fillRect(100,100,20,20);
}
public static void main (String[] args)
{
new Pythag ();
} // main method
}
如果您确实想覆盖 paint()
,则仅覆盖顶级容器,请参阅 this 以获得更完整的解释。不过,"cleanest" 方法是创建一个新的 class,它扩展 JPanel
并覆盖 paintComponent()
。如果你想在运行时重新绘制面板,你可以调用repaint()
。这是一个例子:
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.Graphics.*;
import java.awt.event.*;
import java.text.*;
import java.util.Random;
public class Pythag {
public Pythag() {
JFrame frame = new JFrame("JFrame");
frame.setContentPane(new MyPanel());
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setSize(500, 500);
frame.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new Pythag();
}
});
}
public class MyPanel extends JPanel {
int x;
int y;
public MyPanel() {
ActionListener al = new ActionListener() {
Random r = new Random();
@Override
public void actionPerformed(ActionEvent e) {
x = r.nextInt(getWidth()); // Random x-coordinate
y = r.nextInt(getHeight()); // Random y-coordinate
repaint(); // Repaints the panel
}
};
Timer timer = new Timer(500, al); // Runs ever 500 milliseconds.
timer.start();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g); // Removes previous drawings
g.setColor(Color.RED);
g.fillRect(x, y, 10, 10);
}
}
}