JPanel 如何创建 instance/object
JPanel How to create an instance/object
我总是混淆 JFrame 和 JPanel。我有一个可以编译的代码,但什么也没有发生,程序结束了。
这是一项作业,要求我们画一个三角形。然后添加一个按钮,当按钮被按下时,三角形会倒转。再次按 return 到第一个位置。
任何帮助都会很棒。这是我无数的草稿,我只是想发起对象查看。
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.geom.Line2D;
import java.awt.Color;
public class Triangle extends JPanel implements ActionListener
{
JButton button = new JButton("Just Flip It");
public Triangle()
{
add(button);
button.addActionListener(this);
}
public void actionPerformed(ActionEvent e)
{
}
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawLine(125,75,100,200);
g.drawLine(125,75,150,200);
g.drawLine(100,200,150,200);
}
public static void main(String[] args)
{
Triangle frame = new Triangle();
frame.setSize(400, 400);
frame.setVisible(true);
}
}
您需要在主方法中将 JPanel 添加到 JFrame 对象,就像将按钮添加到面板一样。 JFrame 是您的 JPanel 所在的 window。
确保将 JFrame 对象设置为可见并设置其大小。
与您的问题无关,但我建议至少为您分离出一个私有的 class ActionListener,而不是让三角形 class 两者兼而有之。如果您喜欢冒险,可以考虑使用匿名内部 class 或 lambda 表达式。
把 JPanel
想象成一张纸,把 JFrame
想象成一本书。
如果您从未将这张纸添加到书中,它将永远不会显示。
所以,这里是获取程序的步骤 运行:
- 创建一个
JFrame
来容纳你的 JPanel
(三角形)
- 在您的
ActionListener
中添加一些逻辑以获得布尔标志,该标志将根据当前状态更改为 true
或 false
,并基于它重新绘制窗格
- 在
paintComponent(...)
方法中有一些逻辑,根据上面布尔标志的状态绘制倒置或倒置的三角形
因此,根据上面的 main(...)
方法,您应该
JFrame frame = new JFrame("My frame");
//Initialize your Triangle here
frame.add(triangle);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
您的 actionPerformed()
方法应如下所示:
public void actionPerformed(ActionEvent e)
{
clicked = !clicked;
repaint();
}
还有你的paintComponent()
:
super.paintComponent();
if (clicked) {
//Draw upside up
} else {
//Draw upside down
}
由于我们使用的是 pack()
而不是 setSize(...)
方法,因此我们也应该重写 JPanel
的 getPreferredSize()
方法:
@Override
public Dimension getPreferredSize() {
return new Dimension(400, 400);
}
否则我们会得到一个非常小的JFrame
(这样做是个好习惯)
另外不要忘记将您的程序放在 EDT 上(正如我在本 的第 2 点中所示)
作为旁注,您可能还想按照@MadProgrammer 在
中的推荐使用形状的API
上面的两个链接都有很棒的示例和提示,请查看!
我总是混淆 JFrame 和 JPanel。我有一个可以编译的代码,但什么也没有发生,程序结束了。
这是一项作业,要求我们画一个三角形。然后添加一个按钮,当按钮被按下时,三角形会倒转。再次按 return 到第一个位置。
任何帮助都会很棒。这是我无数的草稿,我只是想发起对象查看。
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.geom.Line2D;
import java.awt.Color;
public class Triangle extends JPanel implements ActionListener
{
JButton button = new JButton("Just Flip It");
public Triangle()
{
add(button);
button.addActionListener(this);
}
public void actionPerformed(ActionEvent e)
{
}
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawLine(125,75,100,200);
g.drawLine(125,75,150,200);
g.drawLine(100,200,150,200);
}
public static void main(String[] args)
{
Triangle frame = new Triangle();
frame.setSize(400, 400);
frame.setVisible(true);
}
}
您需要在主方法中将 JPanel 添加到 JFrame 对象,就像将按钮添加到面板一样。 JFrame 是您的 JPanel 所在的 window。
确保将 JFrame 对象设置为可见并设置其大小。
与您的问题无关,但我建议至少为您分离出一个私有的 class ActionListener,而不是让三角形 class 两者兼而有之。如果您喜欢冒险,可以考虑使用匿名内部 class 或 lambda 表达式。
把 JPanel
想象成一张纸,把 JFrame
想象成一本书。
如果您从未将这张纸添加到书中,它将永远不会显示。
所以,这里是获取程序的步骤 运行:
- 创建一个
JFrame
来容纳你的JPanel
(三角形) - 在您的
ActionListener
中添加一些逻辑以获得布尔标志,该标志将根据当前状态更改为true
或false
,并基于它重新绘制窗格 - 在
paintComponent(...)
方法中有一些逻辑,根据上面布尔标志的状态绘制倒置或倒置的三角形
因此,根据上面的 main(...)
方法,您应该
JFrame frame = new JFrame("My frame");
//Initialize your Triangle here
frame.add(triangle);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
您的 actionPerformed()
方法应如下所示:
public void actionPerformed(ActionEvent e)
{
clicked = !clicked;
repaint();
}
还有你的paintComponent()
:
super.paintComponent();
if (clicked) {
//Draw upside up
} else {
//Draw upside down
}
由于我们使用的是 pack()
而不是 setSize(...)
方法,因此我们也应该重写 JPanel
的 getPreferredSize()
方法:
@Override
public Dimension getPreferredSize() {
return new Dimension(400, 400);
}
否则我们会得到一个非常小的JFrame
(这样做是个好习惯)
另外不要忘记将您的程序放在 EDT 上(正如我在本
作为旁注,您可能还想按照@MadProgrammer 在
上面的两个链接都有很棒的示例和提示,请查看!