有几次我因为建议使用以下方法而受到批评:
在Swing组件上.当我想在显示的组件之间定义比例时,我没有看到任何替代它们的用法.我被告知这个:
对于布局,答案总是相同的:使用合适的LayoutManager
我在网上搜索了一下,但我没有找到任何关于这个主题的综合分析.所以我有以下问题:
JRE版本1.7更新3
预期的行为
当我运行该程序时,它按预期工作,一切顺利.当我点击STOP JButton动画停止并且同一文本JButton改变为START.现在当我点击时BALL COLOUR JButton,BALL变化的颜色以及变化的颜色BALL COLOUR JBUTTON也会变化BALL.如果我按原样运行我的应用程序而不调整大小,则整个行为都有效.
意外行为
但当RESIZE我JFrame通过拉动时Right Side,那就是当我的应用程序的意外行为被显示时,在某种意义上说,如果我按下STOP JButton然后单击BALL COLOUR按钮,JButton之前单击的文本更改为的文本START将STOP在不应该更改时再次更改为当它应该改变为球的颜色时,以及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) 我最近想在JavaFX中创建一个动画背景,类似于这里看到的Swing示例.我使用了一个Canvas绘制的内容,如使用Canvas API所示,以及一个AnimationTimer绘图循环,如动画基础知识所示.不幸的是,我不确定如何在调整Canvas封闭Stage大小时自动调整大小.什么是好方法?

如果创建一个视口大于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) 我有一个类,我希望只能为其子对象访问该方法,而不是该包中的其他类.
Modifier | Class | Package | Subclass | World
————————————+———————+—————————+——————————+———————
public | ? | ? | ? | ?
————————————+———————+—————————+——————————+———————
protected | ? | ? | ? | ?
————————————+———————+—————————+——————————+———————
no modifier | ? | ? | ? | ?
————————————+———————+—————————+——————————+———————
private | ? | ? | ? | ?
____________+_______+_________+__________+_______
my Modifier | ? | ? | ? | ?
____________+_______+_________+__________+_______
Run Code Online (Sandbox Code Playgroud)
是否有一种解决方法来拥有这种修饰符?
也许有办法让一个包最终,所以其他程序员不能在我的包中添加任何类?
或者有没有办法获取调用该函数的实例,并检查这个是否是我的super对象的实例?
或者我只需要离开它,只使用受保护的,其他程序员可能会在我的包中添加类...
我JPanel添加了一个JViewport,面板上还添加了其他几个面板.我正在尝试实现拖动选择,您可以通过拖动鼠标选择多个组件.我面临的唯一问题是选择矩形被绘制在添加到main的组件后面JPanel.我怎样才能在它们上面画画?
我的结构如下:JFrame- > ContentPane- > JLayeredPane- > JScrollPane- > JPanel- > JPanel [].
大学作业设计草案:
如您所见,矩形位于其他面板的后面.

我正在尝试用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) 我需要在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.并在滚动窗格时.也向下滚动图像.并在每个卷轴重复图像.
有没有办法限制只在背景上滚动.谢谢
我正在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) 框架窗口正在启动,但背景和前景图像未加载,窗框尺寸也非常小.请帮我修复错误.
这是发布的代码
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)