我从这里得到了一些有趣的想法和批评,这篇和这篇文章(参见上一篇关于GUI代码的帖子).尽管如此,我仍然对某些事情感到困惑.主要是,显示用户引入图形的最便宜的方式是什么?
更具体而言,我使用了paintComponent()从方法JPanel通过使这个类的一个对象中的类MouseDragged()与方法一起paintComponent(getGraphics())方法(AuxClass2和AuxClass1相应地).
显然,使用getGraphics()而paintComponent()不是repaint()坏主意,我怀疑与内存使用有关.AuxClass2每次用户拖动鼠标时调用也是一个坏主意.
JPanel vs Canvas(即swing vs awt)也有点令人困惑.使用什么以及何时使用?
我一直试图找到一个解决方法,但没有找到一个,特别是对于getGraphics()方法:如何将图形添加到面板?
我正在使用NetBeans GUI编辑器创建一个应用程序,我希望在其中有一个JSplitPane,其顶部组件将Canvas在a中JScrollPane,而底部组件将是a JTextArea或类似的东西.
当我向下拉分隔器,从而增加顶部组件的大小时,一切似乎都调整得很好.
当我试图向上推动分频器时出现问题:分频器似乎在Canvas(也可能在它下面JScrollPane)下方.
我试图首选/最小/最大的尺寸的各种组合JScrollPane和Canvas,但似乎没有任何工作.
这是Netbeans生成的代码的一部分,可能与手头的问题有关:
jSplitPane1 = new javax.swing.JSplitPane();
jScrollPane1 = new javax.swing.JScrollPane();
canvas1 = new java.awt.Canvas();
jTextField1 = new javax.swing.JTextField();
jSplitPane1.setDividerLocation(300);
jSplitPane1.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
jScrollPane1.setViewportView(canvas1);
jSplitPane1.setTopComponent(jScrollPane1);
jTextField1.setText("jTextField1");
jSplitPane1.setRightComponent(jTextField1);
Run Code Online (Sandbox Code Playgroud)
由于这是我的第一个问题,我不允许在问题中嵌入图像,因此我将发布链接:

红色箭头表示分隔线的位置.
在此先感谢您的时间.
我正在制作一个具有滚动图像的程序,如果按下按钮,我无法弄清楚如何更新图像(例如:向图像添加绿色椭圆.)它已经绘制了将图像放入JScrollPane并可以滚动,但是当您单击按钮时它不会刷新图像.(代码中的更多细节)这是代码:
public class PegMaster extends JPanel implements ActionListener {
//Note: not complete code
public PegBox[] pegbox = new PegBox[9];
public static Dimension size = new Dimension(520, 500);
public BufferedImage canvas;
public Graphics2D g2d;
public JScrollPane scroller;
JPanel panel;
private Canvas window;
JScrollPane pictureScrollPane;
public PegMaster() {
JButton button = new JButton("test");
button.addActionListener(this);
add(button);
canvas = new BufferedImage((int)size.getWidth()-30, 75 * GUESSES, BufferedImage.TYPE_INT_RGB);
g2d = canvas.createGraphics();
for(int i = 0;i<=pegbox.length-1;i++) {
pegbox[i] = new PegBox(i, g2d);
}
window = new Canvas(new ImageIcon(toImage(canvas)), …Run Code Online (Sandbox Code Playgroud) 我有一个扩展jlabel并使用paintComponent绘制它的类,如下所示:paintPhotos.java
package myApp;
import java.awt.*;
import javax.swing.*;
/**
*
* @author PAGOLINA
*/
public class paintPhotos extends javax.swing.JLabel {
public Image img; int w; int h;
public paintPhotos(Image img, int w, int h) {
this.img = img; this.w = w; this.h = h;
System.out.println("am paintclass");
}
@Override
public void paintComponent(Graphics p) {
System.out.println("am here");
super.paintComponent(p);
Graphics2D g2 = (Graphics2D) p;
p.drawImage(img, 0, 0, w, h, this);
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试从另一个类的构造函数中绘制时(AddScore.java).
public AddScore() {
initComponents();
setLocationRelativeTo(null);
removeNotify();
setUndecorated(true);
Image imag = new …Run Code Online (Sandbox Code Playgroud) 好的,我需要帮助改变这个滑块的色调.我似乎无法弄明白.请不要@override.我需要一些可以在Ready to Program上运行的东西.当滑块返回0时,色调将恢复正常.我不需要太复杂.只需一个简单的Hue滑块就可以了.谢谢!
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.applet.Applet;
import javax.swing.event.*;
import java.applet.*;
public class test extends Applet implements ActionListener, ChangeListener
{
//Widgets, Panels
JSlider slider;
Panel flow;
int colorr;
int colorg;
int colorb;
int stars;
//House Coordinates, initialized to 1. (Top Right and No Scaling)
public void init ()
{ //Set Up Input Fields for House Coordinates
resize (380, 240);
setBackground (new Color (102, 179, 255));
slider = new JSlider ();
slider.setValue (0);
slider.setBackground (new Color (102, …Run Code Online (Sandbox Code Playgroud)