相关疑难解决方法(0)

我应该避免在Java Swing中使用set(Preferred | Maximum | Minimum)Size方法吗?

有几次我因为建议使用以下方法而受到批评:

  1. 有必要对setPreferredSize
  2. 了setMinimumSize
  3. setMaximumSize

Swing组件上.当我想在显示的组件之间定义比例时,我没有看到任何替代它们的用法.我被告知这个:

对于布局,答案总是相同的:使用合适的LayoutManager

我在网上搜索了一下,但我没有找到任何关于这个主题的综合分析.所以我有以下问题:

  1. 我应该完全避免使用这些方法吗?
  2. 已经定义了这些方法的原因.那我什么时候应该使用它们?在哪种情况下?出于什么目的?
  3. 使用这些方法的负面后果究竟是什么?(我只能考虑在具有不同屏幕分辨率的系统之间添加可移植性).
  4. 我认为任何LayoutManager都不能完全满足所有需要的布局需求.我是否真的需要为布局上的每个小变化实现一个新的LayoutManager?
  5. 如果4的答案是"是",那么这是否会导致LayoutManager类的扩散变得难以维护?
  6. 在我需要定义组件子级之间的比例的情况下(例如,child1应该使用10%的空间,child2 40%,child3 50%),是否可以在不实现自定义LayoutManager的情况下实现这一点?

java swing layout-manager

471
推荐指数
8
解决办法
5万
查看次数

如何消除java动画闪烁

我正在编写一个需要在屏幕上平滑滚动波形的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 concurrency animation swing flicker

7
推荐指数
2
解决办法
8493
查看次数

如何在Java中锁定gridLayout的宽高比?

是否有一种简单的方法可以锁定Java Swing中GridLayout组件的宽高比?或者应该在包含该布局的JPanel上完成?

java layout swing gridbaglayout

5
推荐指数
1
解决办法
2288
查看次数

在Swing中指定Canvas的位置

我正在学习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 user-interface swing jpanel jframe

5
推荐指数
1
解决办法
2707
查看次数

按钮点击后重新绘制JPanel

我是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中使用鼠标事件来解决问题吗?

java swing jpanel repaint

2
推荐指数
1
解决办法
1万
查看次数