2

我正在尝试创建一个自定义计时器,该计时器将记录以天为单位的累积时间流逝。我有一个自定义的 JPanel,它可以为我完成所有的计时器工作。我想与这个 JPanel 有一个 GUI 交互,代表 7 次。但是,当我向 JPanel 或 JFrame 添加多个自定义 JPanel 时,它们不会出现。我已经尝试设置布局并将它们设置为我能想到的所有内容,但没有任何效果。

这是面板的基本设置:

public class TimerPane extends JPanel{
    private static JButton button = new JButton("Start");
    private static JLabel label = new JLabel("Time elapsed:");
    private static JLabel tLabel = new JLabel("0:0:0");
    private static JLabel title = new JLabel("Timer");

    public TimerPane(){
        button.addActionListener(new ButtonListener());

        this.add(title);
        this.add(label);
        this.add(tLabel);
        this.add(button);
        this.setOpaque(false);

        this.setPreferredSize(new Dimension(100,100));
        this.setMaximumSize(new Dimension(100,100));
    }
}

这是我最近一次尝试让 JPanel 显示多次(这里只有两次):

public static void main(String[] args){
    JFrame frame = new JFrame("Timer");
    JPanel panel = new JPanel();
    frame.setPreferredSize(new Dimension(700,110));

    panel.setLayout(new BorderLayout());

    panel.add(new TimerPane(), BorderLayout.EAST);
    panel.add(new TimerPane(), BorderLayout.WEST);

    frame.getContentPane().add(panel);


    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setVisible(true);
}

在此之后执行的 GUI 是 700x110,其中只有最左侧的 100x100 正好用于我的 TimerPane 面板之一。我也在相同的代码上尝试了 GridLayout,但是只有第二个“点”中的 TimerPane 出现。有什么建议么?

4

1 回答 1

1

首先,请从static成员变量中删除:buttonlabel和。否则,拥有它们,这意味着它们由所有实例共享。您现在将看到 2 个计时器面板。tLabeltitlestaticTimerPane

接下来,您可以将 更改BorderLayout为一个FlowLayout实例并添加多个TimerPane.

panel.setLayout(new FlowLayout(FlowLayout.LEFT));

panel.add(new TimerPane());
panel.add(new TimerPane());
于 2012-09-11T18:52:02.330 回答