我从这里得到了一些有趣的想法和批评,这篇和这篇文章(参见上一篇关于GUI代码的帖子).尽管如此,我仍然对某些事情感到困惑.主要是,显示用户引入图形的最便宜的方式是什么?
更具体而言,我使用了paintComponent()从方法JPanel通过使这个类的一个对象中的类MouseDragged()与方法一起paintComponent(getGraphics())方法(AuxClass2和AuxClass1相应地).
显然,使用getGraphics()而paintComponent()不是repaint()坏主意,我怀疑与内存使用有关.AuxClass2每次用户拖动鼠标时调用也是一个坏主意.
JPanel vs Canvas(即swing vs awt)也有点令人困惑.使用什么以及何时使用?
我一直试图找到一个解决方法,但没有找到一个,特别是对于getGraphics()方法:如何将图形添加到面板?
我正在学习Swing GUI设计.我还没有完全解决的一件事是如何添加添加Canvas到容器中的特定位置.
更具体地说:我创建了一个Canvas使用Paint方法的类.此类的对象将添加到Panel中.我不太明白的是,它是如何以及在何处添加到Panel中的.在Tkinter中Canvas是一个仅包含图像的小部件,但在Swing中,没有类似的小部件(可能不是最好的单词)添加到仅包含Canvas对象的Frame,而不包含任何其他内容.
对不起,如果它太模糊,我正在添加一个自包含的代码.请忽略文本字段和标签.
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.JTextField;
//frame class
class frame_class2 extends JFrame implements ActionListener{
//declare buttons
JButton draw_button = new JButton("Draw");
JButton quit_button= new JButton("Quit");
JButton info_button = new JButton("Info");
//declare labels
JLabel x_loc = new JLabel("X:");
JLabel y_loc = new JLabel("Y:");
JLabel w_label= …Run Code Online (Sandbox Code Playgroud) 制作这个画笔程序我决定要清除面板容器(panel2在链接代码中).我使用过PanelName.setForeground(null)它.我想知道的是,这种方法是否存在已知的缺点以及从容器中删除图形对象的其他方法.