相关疑难解决方法(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万
查看次数

布局似乎有些问题,JButton在调整窗口大小时显示出意外行为

JRE版本1.7更新3

预期的行为

当我运行该程序时,它按预期工作,一切顺利.当我点击STOP JButton动画停止并且同一文本JButton改变为START.现在当我点击时BALL COLOUR JButton,BALL变化的颜色以及变化的颜色BALL COLOUR JBUTTON也会变化BALL.如果我按原样运行我的应用程序而不调整大小,则整个行为都有效.

意外行为

但当RESIZEJFrame通过拉动时Right Side,那就是当我的应用程序的意外行为被显示时,在某种意义上说,如果我按下STOP JButton然后单击BALL COLOUR按钮,JButton之前单击的文本更改为的文本STARTSTOP在不应该更改时再次更改为当它应该改变为球的颜色时,以及BALL COLOUR JButton将保持不变或将转向BLUE的颜色.我附上照片了解更多信息.但是如果你试图将它重新调整到原来的大小或更接近它,​​那么事情就会恢复正常.为什么会这样?任何想法或线索将非常感激.

正如我的应用程序运行如上所述的预期行为:

预期的行为

这里是意想不到的行为

意外行为

底线:

为什么应用程序像往常一样运行BEGINNING,而不是RESIZED通过拖动它RIGHT SIDE,但是如果你把它带到它的原始大小或更接近它,​​事情恢复正常,它按预期工作?

所以考虑到这个场景,我在程序中做错了什么.或者这正是我应该使用的情况SwingWorker,或者这是一个问题Layout,或隐藏的相关内容Content Pane.请放轻装:-)

这是我正在使用的代码,我把它降到最低限度,因为我想要证明我的问题:

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class …
Run Code Online (Sandbox Code Playgroud)

java swing resize jframe jbutton

13
推荐指数
3
解决办法
6135
查看次数

自动调整Canvas大小以填充封闭的Parent

我最近想在JavaFX中创建一个动画背景,类似于这里看到的Swing示例.我使用了一个Canvas绘制的内容,如使用Canvas API所示,以及一个AnimationTimer绘图循环,如动画基础知识所示.不幸的是,我不确定如何在调整Canvas封闭Stage大小时自动调整大小.什么是好方法?

图片

java animation resize javafx

13
推荐指数
3
解决办法
6880
查看次数

Swing:创建一个显示其组件居中的JScrollPane?

如果创建一个视口大于JScrollPane组件的JScrollPane,它会在左上角显示该组件.

有没有办法改变这种行为,所以它显示组件居中?

示例程序如下.


澄清:

我有一个组件有(宽度,高度)=(cw,ch).

我有一个JScrollPane,其视口有(宽度,高度)=(vw,vh).

组件可能变大或变小.我想要一种方法来使用滚动条相对于视口的中心点定位组件的中心点,因此如果组件的一个或两个维度小于视口,则组件将显示在视口的中心.

默认的滚动窗格行为将组件的左上角相对于视口的左上角定位.

我要问的是如何改变参考点.我不确定这对于默认的JScrollPane有多容易,所以如果它不容易,那么我将学习我能做什么,并想到一个不同的方法.


package com.example.test.gui;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class SimpleScroller extends JFrame {
    static class Thingy extends JPanel
    {
        private double size = 20.0;

        @Override public Dimension getPreferredSize() {
            int isize = (int) this.size;
            return new Dimension(isize, isize);
        }
        @Override protected void paintComponent(Graphics g) {
            super.paintComponent(g);

            int[] x = {0, 100, …
Run Code Online (Sandbox Code Playgroud)

java swing jscrollpane

11
推荐指数
1
解决办法
6010
查看次数

私有和受保护之间的Java

我有一个类,我希望只能为其子对象访问该方法,而不是该包中的其他类.

Modifier    | Class | Package | Subclass | World
————————————+———————+—————————+——————————+———————
public      |  ?    |    ?    |    ?     |   ?
————————————+———————+—————————+——————————+———————
protected   |  ?    |    ?    |    ?     |   ?
————————————+———————+—————————+——————————+———————
no modifier |  ?    |    ?    |    ?     |   ?
————————————+———————+—————————+——————————+———————
private     |  ?    |    ?    |    ?     |   ?
____________+_______+_________+__________+_______
my Modifier |  ?    |    ?    |    ?     |   ?
____________+_______+_________+__________+_______
Run Code Online (Sandbox Code Playgroud)

是否有一种解决方法来拥有这种修饰符?

也许有办法让一个包最终,所以其他程序员不能在我的包中添加任何类?

或者有没有办法获取调用该函数的实例,并检查这个是否是我的super对象的实例?

或者我只需要离开它,只使用受保护的,其他程序员可能会在我的包中添加类...

java access-modifiers

10
推荐指数
1
解决办法
189
查看次数

在Swing中绘制组件顶部?

JPanel添加了一个JViewport,面板上还添加了其他几个面板.我正在尝试实现拖动选择,您可以通过拖动鼠标选择多个组件.我面临的唯一问题是选择矩形被绘制在添加到main的组件后面JPanel.我怎样才能在它们上面画画?

我的结构如下:
JFrame- > ContentPane- > JLayeredPane- > JScrollPane- > JPanel- > JPanel [].

大学作业设计草案:
如您所见,矩形位于其他面板的后面.

大学任务设计草案.

java swing jpanel miglayout paintcomponent

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

如何在Java中制作星形?

我正在尝试用Java制作一些形状.我创建了两个有两种不同颜色的矩形,但我想创建一个星形,我找不到有用的来源来帮助我这样做.

这是我的代码:

import java.awt.*;
import javax.swing.*;

public class shapes extends JPanel{

    @Override
    public void paintComponent(Graphics GPHCS){
        super.paintComponent(GPHCS);

        GPHCS.setColor(Color.BLUE);
        GPHCS.fillRect(25,25,100,30);

        GPHCS.setColor(Color.GRAY);
        GPHCS.fillRect(25,65,100,30);

        GPHCS.setColor(new Color(190,81,215));
        GPHCS.drawString("This is my text", 25, 120);
    }
}
Run Code Online (Sandbox Code Playgroud)

java swing shapes paintcomponent

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

如何在JTable上添加图像背景,滚动JTable时不滚动

我需要在JTable后面添加一个图像背景,滚动我的JTable时不应该缩小.目前我添加了一个Image behing my JTable.使用绘画方法.

public void paint(Graphics g) 
            {
                // First draw the background image - tiled
                Dimension d = getSize();
                for (int x = 0; x < d.width; x += image.getIconWidth())
                    for (int y = 0; y < d.height; y += image.getIconHeight())
                        g.drawImage(image.getImage(), x, y, null, null);
                // Now let the regular paint code do it's work
                super.paint(g);
            }
Run Code Online (Sandbox Code Playgroud)

问题是.这个JTable位于JScrollPane.并在滚动窗格时.也向下滚动图像.并在每个卷轴重复图像.

有没有办法限制只在背景上滚动.谢谢

java swing background jtable jscrollpane

3
推荐指数
1
解决办法
3095
查看次数

当许多精灵在屏幕上时,Java Swing游戏的性能很差

我正在Swing中制作一个简单的塔防游戏,当我尝试在屏幕上放置许多精灵(超过20个)时,我遇到了性能问题.

整个游戏发生在具有setIgnoreRepaint(true)的JPanel上.这是paintComponent方法(con是Controller):

public void paintComponent(Graphics g){
    super.paintComponent(g);
    //Draw grid
    g.drawImage(background, 0, 0, null);
    if (con != null){
        //Draw towers
        for (Tower t : con.getTowerList()){
            t.paintTower(g);
        }
        //Draw targets
        if (con.getTargets().size() != 0){
            for (Target t : con.getTargets()){
                t.paintTarget(g);
            }
            //Draw shots
            for (Shot s : con.getShots()){
                s.paintShot(g);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Target类simple在其当前位置绘制BufferedImage.getImage方法不会创建新的BufferedImage,它只返回Controller类的实例:

public void paintTarget(Graphics g){
    g.drawImage(con.getImage("target"), getPosition().x - 20, getPosition().y - 20, null);
}
Run Code Online (Sandbox Code Playgroud)

每个目标都运行一个Swing Timer来计算它的位置.这是它调用的ActionListener:

public void actionPerformed(ActionEvent e) {
    if (!waypointReached()){
        x += dx;
        y += dy; …
Run Code Online (Sandbox Code Playgroud)

java animation swing

3
推荐指数
1
解决办法
701
查看次数

图像未加载

框架窗口正在启动,但背景和前景图像未加载,窗框尺寸也非常小.请帮我修复错误.

这是发布的代码

Aquarium.java

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import java.awt.image.ImageObserver;
import java.util.Vector;

public class Aquarium extends Frame implements Runnable
{
    Image aquariumImage,memoryImage;
    BufferedImage bImage;
    Graphics memoryGraphics;
    Image [] fishImages=new Image[2];
    MediaTracker tracker;
    int numberFishes=12;
    Vector<Fish> fishes=new Vector<Fish>();
    Thread thread;
    boolean runOk=true;
    int sleepTime=110;
    Fish fish;

    Aquarium()
    {

        //set the title and assign tracker object
        setTitle("The Aquarium ");
        tracker=new MediaTracker(this);


        //add images to the tracker object to trace it


        fishImages[0]=Toolkit.getDefaultToolkit().getImage("src\fish1.gif");


        tracker.addImage(fishImages[0], 0);

        System.out.println("fish 1 size "+Toolkit.getDefaultToolkit().getImage("src\fish1.gif").getWidth(null));
        fishImages[1]=Toolkit.getDefaultToolkit().getImage("src\fish2.gif");


        tracker.addImage(fishImages[1], …
Run Code Online (Sandbox Code Playgroud)

java swing image frame paintcomponent

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