有几次我因为建议使用以下方法而受到批评:
在Swing组件上.当我想在显示的组件之间定义比例时,我没有看到任何替代它们的用法.我被告知这个:
对于布局,答案总是相同的:使用合适的LayoutManager
我在网上搜索了一下,但我没有找到任何关于这个主题的综合分析.所以我有以下问题:
我正在编写一个需要在屏幕上平滑滚动波形的java应用程序.我花了很多年的时间通过各种教程来弄清楚如何使这个动画尽可能顺畅.据我所知,我已经做了所有正常的事情来消除闪烁(绘制到屏幕外缓冲区并一步渲染,加上覆盖更新,因此屏幕不会消隐),但我的动画仍然闪烁,屏幕在每次更新之前看起来都被清空了.
我确信有一些基本的(也可能是简单的)我错过了,但我没有想法.我将在下面发布一个说明问题的课程.任何帮助将非常感激.
import java.awt.*;
import javax.swing.*;
public class FlickerPanel extends JPanel implements Runnable {
private float [] pixelMap = new float[0];
/** Cached graphics objects so we can control our animation to reduce flicker **/
private Image screenBuffer;
private Graphics bufferGraphics;
public FlickerPanel () {
Thread t = new Thread(this);
t.start();
}
private float addNoise () {
return (float)((Math.random()*2)-1);
}
private synchronized void advance () {
if (pixelMap == null || pixelMap.length == 0) return;
float [] newPixelMap = new …Run Code Online (Sandbox Code Playgroud) 是否有一种简单的方法可以锁定Java Swing中GridLayout组件的宽高比?或者应该在包含该布局的JPanel上完成?
我正在学习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) 我是Java Swing的新手,我有一个奇怪的问题要刷新我的JPanel.
我JPanel在我的框架中创建一个静态组件,我从一个静态方法调用FileListenner我来重新绘制JPanel
public static void repaintPlan(JPanel f) {
f.paint(f.getGraphics());
f.revalidate(); // or validate
}
Run Code Online (Sandbox Code Playgroud)
我的意思是,当我检测到文件内容的变化时,我计算新的坐标并重新绘制JPanel(我从JPanel to definepaintComponent()`方法创建一个类exends )
当我运行应用程序时,一切正常,并且当文件中的更改数据时重绘工作; 但如果我用鼠标单击Jpanel,该repaint()方法将不再起作用.你能告诉我为什么点击之后JPanel,重新粉刷不起作用?
抱歉我的英文不好谢谢你提前:)
编辑:谢谢你的回复!但即使我使用repaint()方法,也是同样的问题.我正试图了解点击后会发生什么JPanel.我应该在Swing中使用鼠标事件来解决问题吗?