预期的行为
当我运行该程序时,它按预期运行,一切正常。当我单击
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
有关的隐藏问题。请注意一下:-) 这是我正在使用的代码,由于我想证明我的问题,我将其降至最低程度:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class BallAnimation
{
private int x;
private int y;
private boolean positiveX;
private boolean positiveY;
private boolean isTimerRunning;
private int speedValue;
private int diameter;
private DrawingArea drawingArea;
private Timer timer;
private int colourCounter;
Color[] colours = {
Color.BLUE.darker(),
Color.MAGENTA.darker(),
Color.BLACK.darker(),
Color.RED.darker(),
Color.PINK.darker(),
Color.CYAN.darker(),
Color.DARK_GRAY.darker(),
Color.YELLOW.darker(),
Color.GREEN.darker()
};
private Color backgroundColour;
private Color foregroundColour;
private ActionListener timerAction = new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
x = getX();
y = getY();
drawingArea.setXYColourValues(x, y, backgroundColour
, foregroundColour);
}
};
private JPanel buttonPanel;
private JButton startStopButton;
private JButton speedIncButton;
private JButton speedDecButton;
private JButton resetButton;
private JButton colourButton;
private JButton exitButton;
private ComponentAdapter componentAdapter = new ComponentAdapter()
{
public void componentResized(ComponentEvent ce)
{
timer.restart();
startStopButton.setText("STOP");
isTimerRunning = true;
}
};
public BallAnimation()
{
x = y = 0;
positiveX = positiveY = true;
speedValue = 1;
colourCounter = 0;
isTimerRunning = false;
diameter = 50;
backgroundColour = Color.WHITE.brighter();
foregroundColour = colours[colourCounter];
timer = new Timer(10, timerAction);
}
private void createAndDisplayGUI()
{
JFrame frame = new JFrame("Ball Animation");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationByPlatform(true);
drawingArea = new DrawingArea(x, y
, backgroundColour, foregroundColour, diameter);
drawingArea.addComponentListener(componentAdapter);
frame.add(makeButtonPanel(), BorderLayout.LINE_END);
frame.add(drawingArea, BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
private JPanel makeButtonPanel()
{
buttonPanel = new JPanel();
buttonPanel.setLayout(new GridLayout(0, 1));
buttonPanel.setBorder(BorderFactory.createLineBorder(
Color.DARK_GRAY, 5, true));
startStopButton = new JButton("START");
startStopButton.setBackground(Color.GREEN.darker());
startStopButton.setForeground(Color.WHITE.brighter());
startStopButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
System.out.println("START/STOP JButton Clicked!");
if (!isTimerRunning)
{
startStopButton.setText("STOP");
timer.start();
isTimerRunning = true;
buttonPanel.revalidate();
buttonPanel.repaint();
}
else if (isTimerRunning)
{
startStopButton.setText("START");
timer.stop();
isTimerRunning = false;
buttonPanel.revalidate();
buttonPanel.repaint();
}
}
});
startStopButton.setBorder(BorderFactory.createLineBorder(
Color.WHITE, 4, true));
buttonPanel.add(startStopButton);
colourButton = new JButton("BALL COLOUR");
colourButton.setBackground(colours[colourCounter]);
colourButton.setForeground(Color.WHITE);
colourButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
System.out.println("COLOUR JButton Clicked!");
//timer.restart();
colourCounter++;
if (colourCounter == 9)
colourCounter = 0;
foregroundColour = colours[colourCounter];
drawingArea.setXYColourValues(x, y, backgroundColour
, foregroundColour);
//drawingArea.setForegroundForBall(foregroundColour);
colourButton.setBackground(foregroundColour);
colourButton.revalidate();
colourButton.repaint();
//timer.start();
}
});
colourButton.setBorder(BorderFactory.createLineBorder(
Color.WHITE, 2, true));
buttonPanel.add(colourButton);
exitButton = new JButton("EXIT");
exitButton.setBackground(Color.RED.darker());
exitButton.setForeground(Color.WHITE.brighter());
exitButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
System.out.println("EXIT JButton Clicked!");
timer.stop();
System.exit(0);
}
});
exitButton.setBorder(BorderFactory.createLineBorder(
Color.RED.darker().darker(), 4, true));
buttonPanel.add(exitButton);
return buttonPanel;
}
private int getX()
{
if (x < 0)
positiveX = true;
else if (x >= drawingArea.getWidth() - diameter)
positiveX = false;
return (calculateX());
}
private int calculateX()
{
if (positiveX)
return (x += speedValue);
else
return (x -= speedValue);
}
private int getY()
{
if (y < 0)
positiveY = true;
else if (y >= drawingArea.getHeight() - diameter)
positiveY = false;
return (calculateY());
}
private int calculateY()
{
if (positiveY)
return (y += speedValue);
else
return (y -= speedValue);
}
public static void main(String... args)
{
Runnable runnable = new Runnable()
{
public void run()
{
new BallAnimation().createAndDisplayGUI();
}
};
SwingUtilities.invokeLater(runnable);
}
}
class DrawingArea extends JComponent
{
private int x;
private int y;
private int ballDiameter;
private Color backgroundColor;
private Color foregroundColor;
public DrawingArea(int x, int y
, Color bColor, Color fColor, int dia)
{
this.x = x;
this.y = y;
ballDiameter = dia;
backgroundColor = bColor;
foregroundColor = fColor;
setBorder(BorderFactory.createLineBorder(
Color.DARK_GRAY.darker(), 5, true));
}
public void setXYColourValues(int x, int y
, Color bColor, Color fColor)
{
this.x = x;
this.y = y;
backgroundColor = bColor;
foregroundColor = fColor;
repaint();
}
public Dimension getPreferredSize()
{
return (new Dimension(500, 400));
}
public void paintComponent(Graphics g)
{
g.setColor(backgroundColor);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(foregroundColor);
g.fillOval(x, y, ballDiameter, ballDiameter);
}
}
**最新编辑:**
#1 楼
您的非常好的示例的问题可能取决于平台,但是我可以提供一些观察结果:您不需要添加或删除组件,因此不需要
revalidate()
。因为背景颜色是按钮的绑定属性,所以您不需要后续调用
repaint()
。您确实需要在自定义
repaint()
中添加DrawingArea
,但是您可能想尝试添加属性更改支持Color.white
不能为brighter()
,Color.black
不能为darker()
; Color.darkGray.darker()
是Color.black()
。下面的变体使用
Queue<Color>
简化了颜色更改。import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
/** @see https://stackoverflow.com/q/9849950/230513 */
public class BallAnimation {
private int x;
private int y;
private boolean positiveX;
private boolean positiveY;
private boolean isTimerRunning;
private int speedValue;
private int diameter;
private DrawingArea drawingArea;
private Timer timer;
private Queue<Color> clut = new LinkedList<Color>(Arrays.asList(
Color.BLUE.darker(),
Color.MAGENTA.darker(),
Color.BLACK,
Color.RED.darker(),
Color.PINK,
Color.CYAN.darker(),
Color.DARK_GRAY,
Color.YELLOW.darker(),
Color.GREEN.darker()));
private Color backgroundColour;
private Color foregroundColour;
private ActionListener timerAction = new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
x = getX();
y = getY();
drawingArea.setXYColourValues(x, y, backgroundColour, foregroundColour);
}
};
private JPanel buttonPanel;
private JButton startStopButton;
private JButton speedIncButton;
private JButton speedDecButton;
private JButton resetButton;
private JButton colourButton;
private JButton exitButton;
private ComponentAdapter componentAdapter = new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent ce) {
timer.restart();
startStopButton.setText("Stop");
isTimerRunning = true;
}
};
public BallAnimation() {
x = y = 0;
positiveX = positiveY = true;
speedValue = 1;
isTimerRunning = false;
diameter = 50;
backgroundColour = Color.white;
foregroundColour = clut.peek();
timer = new Timer(10, timerAction);
}
private void createAndDisplayGUI() {
JFrame frame = new JFrame("Ball Animation");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationByPlatform(true);
drawingArea = new DrawingArea(x, y, backgroundColour, foregroundColour, diameter);
drawingArea.addComponentListener(componentAdapter);
frame.add(makeButtonPanel(), BorderLayout.LINE_END);
frame.add(drawingArea, BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
private JPanel makeButtonPanel() {
buttonPanel = new JPanel(new GridLayout(0, 1));
buttonPanel.setBorder(BorderFactory.createLineBorder(Color.darkGray, 5));
startStopButton = new JButton("Start");
startStopButton.setOpaque(true);
startStopButton.setForeground(Color.white);
startStopButton.setBackground(Color.green.darker());
startStopButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
if (!isTimerRunning) {
startStopButton.setText("Stop");
timer.start();
isTimerRunning = true;
} else if (isTimerRunning) {
startStopButton.setText("Start");
timer.stop();
isTimerRunning = false;
}
}
});
startStopButton.setBorder(BorderFactory.createLineBorder(Color.gray, 4));
buttonPanel.add(startStopButton);
colourButton = new JButton("Change Color");
colourButton.setOpaque(true);
colourButton.setForeground(Color.white);
colourButton.setBackground(clut.peek());
colourButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
//timer.restart();
clut.add(clut.remove());
foregroundColour = clut.peek();
drawingArea.setXYColourValues(x, y, backgroundColour, foregroundColour);
colourButton.setBackground(foregroundColour);
}
});
colourButton.setBorder(BorderFactory.createLineBorder(Color.gray, 4));
buttonPanel.add(colourButton);
exitButton = new JButton("Exit");
exitButton.setBackground(Color.red);
exitButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
timer.stop();
System.exit(0);
}
});
exitButton.setBorder(BorderFactory.createLineBorder(Color.red.darker(), 4));
buttonPanel.add(exitButton);
return buttonPanel;
}
private int getX() {
if (x < 0) {
positiveX = true;
} else if (x >= drawingArea.getWidth() - diameter) {
positiveX = false;
}
return (calculateX());
}
private int calculateX() {
if (positiveX) {
return (x += speedValue);
} else {
return (x -= speedValue);
}
}
private int getY() {
if (y < 0) {
positiveY = true;
} else if (y >= drawingArea.getHeight() - diameter) {
positiveY = false;
}
return (calculateY());
}
private int calculateY() {
if (positiveY) {
return (y += speedValue);
} else {
return (y -= speedValue);
}
}
public static void main(String... args) {
Runnable runnable = new Runnable() {
@Override
public void run() {
new BallAnimation().createAndDisplayGUI();
}
};
SwingUtilities.invokeLater(runnable);
}
}
class DrawingArea extends JComponent {
private int x;
private int y;
private int ballDiameter;
private Color backgroundColor;
private Color foregroundColor;
public DrawingArea(int x, int y, Color bColor, Color fColor, int dia) {
this.x = x;
this.y = y;
ballDiameter = dia;
backgroundColor = bColor;
foregroundColor = fColor;
setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY, 5));
}
public void setXYColourValues(int x, int y, Color bColor, Color fColor) {
this.x = x;
this.y = y;
backgroundColor = bColor;
foregroundColor = fColor;
repaint();
}
@Override
public Dimension getPreferredSize() {
return (new Dimension(500, 400));
}
@Override
public void paintComponent(Graphics g) {
g.setColor(backgroundColor);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(foregroundColor);
g.fillOval(x, y, ballDiameter, ballDiameter);
}
}
评论
像往常一样,这些示例还是很棒的:-),实际上我写了那些revalidate()和repaint()东西来整理事物,尽管它们不在我的实际程序中。虽然我已经找到了引起问题的原因,但是我真的不知道该如何解决,当Timer实例处于RUNNING状态时,问题就来了。当它停止时,就没有问题了。我曾尝试在colourButtons actionPerformed(...)方法中设置timer.stop,但无济于事。大声笑。上帝知道现在该怎么做:-)再次+1以获得美妙的链接和友善的帮助:-)
– nICE COW
2012年3月24日16:09
Dunno,如果这是实际原因,那么,如果不进行任何调整大小,那么事情按预期进行。可能是与平台有关的问题:-)将与他人进行测试,以了解其在其他计算机上的性能:-)
– nICE COW
2012年3月24日16:19
抱歉,什么都没想到。我添加了最新的变体供参考。
–垃圾神
2012年3月24日19:17
我转移到了JRE版本6,并且一切工作都很好,尽管如果我删除JRE 1.7上每个JButton的整个setBorder(...)语句,即使这样也无法解决问题。但是回到1.6可以解决问题。因此,事情已经解决了,但是如何实现以及仍然是一个谜:-)看来这是JDK 1.7更新3中的一个错误:()
– nICE COW
2012-03-25 5:17
有趣;在Windows 7上使用1.7.0_02,我无法重现异常。如果它仍在您的计算机上,则可以将其放在%path%中。
–垃圾神
2012-03-25 5:47
#2 楼
似乎BorderLayout.LINE_END
有点问题,仅当我将buttonPanel
放在LINE_END
上时,我才得到了不良结果。我试图只使用一个JButton
来解决问题,而不是使用3个作为最新措施。现在,出现了如下图所示的问题:通过将JButton
面板的位置更改为LINE_START
或使用JRE version 1.6 update 31
,可以解决图片如下:
这里是此示例使用的代码:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class BallAnimation
{
private int x;
private int y;
private boolean positiveX;
private boolean positiveY;
private boolean isTimerRunning;
private int speedValue;
private int diameter;
private DrawingArea drawingArea;
private Timer timer;
private int colourCounter;
Color[] colours = {
Color.BLUE.darker(),
Color.MAGENTA.darker(),
Color.BLACK.darker(),
Color.RED.darker(),
Color.PINK.darker(),
Color.CYAN.darker(),
Color.DARK_GRAY.darker(),
Color.YELLOW.darker(),
Color.GREEN.darker()
};
private Color backgroundColour;
private Color foregroundColour;
private ActionListener timerAction = new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
x = getX();
y = getY();
drawingArea.setXYColourValues(x, y, backgroundColour
, foregroundColour);
}
};
private JPanel buttonPanel;
private JButton startStopButton;
private JButton speedIncButton;
private JButton speedDecButton;
private JButton resetButton;
private JButton colourButton;
private JButton exitButton;
private ComponentAdapter componentAdapter = new ComponentAdapter()
{
public void componentResized(ComponentEvent ce)
{
timer.restart();
}
};
public BallAnimation()
{
x = y = 0;
positiveX = positiveY = true;
speedValue = 1;
colourCounter = 0;
isTimerRunning = false;
diameter = 50;
backgroundColour = Color.WHITE.brighter();
foregroundColour = colours[colourCounter];
timer = new Timer(10, timerAction);
}
private void createAndDisplayGUI()
{
JFrame frame = new JFrame("Ball Animation");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationByPlatform(true);
drawingArea = new DrawingArea(x, y
, backgroundColour, foregroundColour, diameter);
drawingArea.addComponentListener(componentAdapter);
frame.add(makeButtonPanel(), BorderLayout.LINE_START);
frame.add(drawingArea, BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
private JPanel makeButtonPanel()
{
buttonPanel = new JPanel();
buttonPanel.setLayout(new GridLayout(0, 1));
buttonPanel.setBorder(BorderFactory.createLineBorder(
Color.DARK_GRAY, 5, true));
colourButton = new JButton("BALL COLOUR");
colourButton.setOpaque(true);
colourButton.setBackground(colours[colourCounter]);
colourButton.setForeground(Color.WHITE);
colourButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
System.out.println("COLOUR JButton Clicked!");
if (timer.isRunning())
timer.stop();
colourCounter++;
if (colourCounter == 9)
colourCounter = 0;
foregroundColour = colours[colourCounter];
drawingArea.setXYColourValues(x, y, backgroundColour
, foregroundColour);
colourButton.setBackground(foregroundColour);
if (!timer.isRunning())
timer.start();
}
});
colourButton.setBorder(BorderFactory.createLineBorder(
Color.WHITE, 2, true));
buttonPanel.add(colourButton);
return buttonPanel;
}
private int getX()
{
if (x < 0)
positiveX = true;
else if (x >= drawingArea.getWidth() - diameter)
positiveX = false;
return (calculateX());
}
private int calculateX()
{
if (positiveX)
return (x += speedValue);
else
return (x -= speedValue);
}
private int getY()
{
if (y < 0)
positiveY = true;
else if (y >= drawingArea.getHeight() - diameter)
positiveY = false;
return (calculateY());
}
private int calculateY()
{
if (positiveY)
return (y += speedValue);
else
return (y -= speedValue);
}
public static void main(String... args)
{
Runnable runnable = new Runnable()
{
public void run()
{
new BallAnimation().createAndDisplayGUI();
}
};
SwingUtilities.invokeLater(runnable);
}
}
class DrawingArea extends JComponent
{
private int x;
private int y;
private int ballDiameter;
private Color backgroundColor;
private Color foregroundColor;
public DrawingArea(int x, int y
, Color bColor, Color fColor, int dia)
{
this.x = x;
this.y = y;
ballDiameter = dia;
backgroundColor = bColor;
foregroundColor = fColor;
setBorder(BorderFactory.createLineBorder(
Color.DARK_GRAY.darker(), 5, true));
}
public void setXYColourValues(int x, int y
, Color bColor, Color fColor)
{
this.x = x;
this.y = y;
backgroundColor = bColor;
foregroundColor = fColor;
repaint();
}
public Dimension getPreferredSize()
{
return (new Dimension(500, 400));
}
public void paintComponent(Graphics g)
{
g.setColor(backgroundColor);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(foregroundColor);
g.fillOval(x, y, ballDiameter, ballDiameter);
}
}
评论
怪异的! BorderLayout.EAST是否也会发生(这与LINE_END的粗略等价?)吗?
–安德鲁·汤普森(Andrew Thompson)
2012年3月25日9:10
是的,同样的问题,BorderLayout.EAST :(
– nICE COW
2012-03-25 9:21
我现在可能会提出一个错误报告。不能说到目前为止,我对1.7的实现印象深刻。他们似乎很越野车。
–安德鲁·汤普森(Andrew Thompson)
2012年3月25日在9:25
啊哈,其他人都在谈论同样的问题:-)水平调整大小,即使他在EAST的组件在调整大小时也丢失了,哈哈
– nICE COW
2012年3月25日10:00
在添加更多组件时,甚至OP在他/她的评论中(在接受的答案下方)都写了它永远不会起作用:-)。
– nICE COW
2012-03-25 10:03
#3 楼
也许会为您提供两部分帮助,我认为Graphics / 2D被指定为专门使用Swing Timer,评论
这是另一个很棒的示例(为此,该示例为+1),但是我很困惑,问题出在哪里,因为绘图部分似乎工作正常。只是JButton的文本和颜色在调整大小时显示奇怪的行为!!!
– nICE COW
2012年3月24日7:59
的确是,这是我对Graphics的第一次接触,只是展览,没有再尝试过,请确保您正在等待碰撞的真实建议
– mKorbel
2012年3月24日上午9:02
我刚刚意识到,如果我将JFrame恢复为原始大小或更小,那么事情又又恢复正常了,这可能是Layout或其他问题吗?
– nICE COW
2012-3-24在11:04
#4 楼
我不确定是否找到适用于您系统的解决方案,但是将代码调整为colourButton = new JButton( "BALL COLOUR" );
colourButton.setOpaque( true );
colourButton.setBackground( colours[ colourCounter ] );
colourButton.setForeground( Color.WHITE );
在我的系统上运行(带有Java 1.7的OS X)。请注意
setOpaque
调用,此调用是必需的,以便setBackground
调用具有该方法的javadoc中所述的任何效果:设置此组件的背景色。仅当组件不透明时才使用背景颜色
在OS X上,如果没有
setOpaque
调用,您的代码甚至无法在调整大小之前起作用评论
不,很抱歉,但是事情再次出现了相同的结果,当您通过拖动右侧来调整JFrame的大小时,colourButton的颜色保持不变或显示某些异常行为。虽然如果我最大化窗口,则它可以正常工作,或者我将窗口调整为原始尺寸或更小。但是,当我调整窗口大小时,还是再次出现相同的行为:(尽管为此付出了+1。感谢您对此的友好帮助:-)
– nICE COW
2012年3月24日13:28
试试看,在程序启动时,拖动JFrame的右侧以更改其宽度,现在单击colourButton,查看其颜色永不改变:-(
– nICE COW
2012年3月24日13:35
虽然如果您不会调整大小或只是稍微改变它以使球可以移动,那么一切都会正常进行,就像往常一样,只是当我尝试进一步调整大小时,事情会出错,:(那件事困扰着我。这里有些奇怪的事情:(我想这对我来说是个坏消息。
– nICE COW
2012年3月24日13:43
不,如果我使用setOpaque调用,它将始终在我的PC上运行。没有此调用,无论是否调整大小,它都将无法工作
–罗宾
2012年3月24日14:25
@Robin:使用setOpaque()为Aqua的背景色+1想法。有时我会采取这种笨拙的选择。巴厘岛甘甘迪普(Gagandeep Bali):与罗宾(Robin)一样,我没有发现异常。
–垃圾神
2012年3月24日14:41
评论
我刚刚意识到,如果您至少要最大化JFrame一次,那么看来一切都会按预期进行:(我在这里没有看到问题(即不最大化第一个),使用带有所示代码的1.6 JRE(在删除第三个arg到createLineBorder之后!)。您显然使用的是1.7(假设7中引入了第3个arg)。这可能是正在使用的JRE中的错误吗?
啊哈,我想可能是个错误,我使用的是1.7 Update 3,以前我不能使用setLayout(new FlowLayout(FlowLayout.LEFT));在1.7 update 1中,您可能是正确的:-),因为如果我最大化它,那一切就好了,就在我通过拖动右侧来调整大小时,只有这样才能给我这种邪恶的行为。我可能会在其他地方再次进行测试,再次感谢您的帮助:-)
我建议1)创建一个转储JRE版本的版本2)获取测试结果以确认模式。 3)检查错误数据库是否重复。 4)寄回新的,如果找不到。 (当然,您可以跳至第3步和第1步和第2步。)
就算我最大化整个窗口一次,也不会出现问题:-),只有当我通过拖动右侧调整窗口大小时,事情才会变得混乱:(