为什么执行 Mockito 模拟所花费的时间如此不稳定?我能想到的最简单的 SSCCE 如下:
import static org.mockito.Mockito.mock;
public class TestSimpleMockTiming
{
public static final void main (final String args [])
{
final Runnable theMock = mock (Runnable.class);
int tookShort = 0;
int tookMedium = 0;
int tookLong = 0;
int tookRidiculouslyLong = 0;
long longest = 0;
for (int n = 0; n < 2000000; n++)
{
final long startTime = System.nanoTime ();
theMock.run ();
final long duration = System.nanoTime () - startTime;
if (duration < 1000000) // 0.001 …Run Code Online (Sandbox Code Playgroud) 如果我设置了一个带有一些组件和布局管理器的 JFrame,它最初看起来非常好,然后由于某些条件(例如,单击一个按钮)我隐藏了其中一个组件 - 布局管理器再次将所有组件打乱.
查看示例代码 - 最初出现 3 个按钮。当您单击“隐藏”按钮时,“隐藏”按钮将被隐藏 - 但两个外部按钮随后会挤压在一起。当您单击显示按钮时,它们会再次分开以腾出空间。我怎样才能阻止这种情况发生,以便在我调用 pack() 之后,无论组件以后是否隐藏,它们都将保持原样?
在我的实际代码中,我使用 GridBagLayout 执行此操作,但在下面的示例中使用 FlowLayout,因为它更简单且代码更少,并且显示的行为完全相同。
我只能想到这样做的讨厌的方法,比如使用 .setEnabled (false) 而不是 .setVisible (false),然后覆盖组件的paintComponent()方法以在组件被禁用时不绘制组件。
这似乎完全相反的问题在这里-隐藏布局的Java Swing的按钮-其中抱怨隐藏按钮就仍然占用空间:)但是,没有任何示例代码有显示它以这种方式工作。
非常感谢您的任何建议:)
例子:
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class RevalidateWhenSetChildInvisibleExample
{
private JButton button1;
private JButton button2;
private JButton button3;
public void run ()
{
// Set up action
Action hideButtonAction = new AbstractAction ()
{
@Override
public void actionPerformed …Run Code Online (Sandbox Code Playgroud)