1

我正在使用 Java Swing 为我的程序编写 GUI。我使用以下链接编写了一个类来扩展我的 JFrame 。我的问题是我的按钮根本不在背景上。也就是说,像这样:

--------------------------------------
|                      |             |
|                      |             |
|           my picture |             |
--------------------------------------
|          |           |             |
|          | Label     |             |
|          | text      |             |
|          | button    |             |
--------------------------------------

我在下面包含了一些伪代码:

    public class demo extends JFrame implements ActionListener
    {
        class demo()
        {

              CustomJFrame frame = new CustomJFrame();
              JPanel pane = new JPanel(new GridBagLayout());

              GridBagConstraints c = new GridBagConstraints();
              JTextField dummyText = new JTextField("I'm some text");
              JLabel dummyLabel = new JLabel("I'm a label);

              JButton dummyButton = new JButton("I'm a button");

              c.fill = GridBagConstraints.BOTH;
              c.gridx = 0;
              c.gridy = 0;
              pane.add(dummyText, c);

              c.fill = GridBagConstraints.BOTH;
              c.gridx = 1; 
              c.gridy = 0;
              pane.add(dummyLabel, c);

              c.fill = GridBagConstraints.BOTH;
              c.gridx = 0;
              c.gridy = 2; 
              pane.add(dummyButton, c);

              frame.add(pane);

        }

    }

这是我基于链接的自定义 JFrame 类。

public class CustomJFrame extends JFrame
{
     private ImageIcon background = new ImageIcon("mypicture.png");
     private JLabel label = new JLabel(background);

     public CustomJFrame()
     {
        this.SetDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setTitle("Traffic Alert Demo");
        setSize(800,480); //specific to my picture though
        add(label, BorderLayout.CENTER);
        setVisible(true);
      }
}

因此,我想要某种方式能够让按钮以我的图片为中心,或者至少能够让我在图片上任何我喜欢的地方移动按钮。到目前为止,我没有找到任何可以帮助我的东西,有什么想法吗?还是我的照片,因为我把它做成了一个标签,与 GridBag 的交互很糟糕?请帮忙。

问候, 极客

4

1 回答 1

2

我可以通过将窗格视为玻璃对象来解决这个问题。因此,我们有以下伪代码:

public class demo extends JFrame implements ActionListener
{
    class demo()
    {

          CustomJFrame frame = new CustomJFrame();
          JPanel pane = new JPanel(new GridBagLayout());

          GridBagConstraints c = new GridBagConstraints();
          JTextField dummyText = new JTextField("I'm some text");
          JLabel dummyLabel = new JLabel("I'm a label);

          JButton dummyButton = new JButton("I'm a button");

          c.fill = GridBagConstraints.BOTH;
          c.gridx = 0;
          c.gridy = 0;
          pane.add(dummyText, c);

          c.fill = GridBagConstraints.BOTH;
          c.gridx = 1; 
          c.gridy = 0;
          pane.add(dummyLabel, c);

          c.fill = GridBagConstraints.BOTH;
          c.gridx = 0;
          c.gridy = 2; 
          pane.add(dummyButton, c);

          pane.setOpaque(false);
          frame.setGlassPane(pane);
          pane.setVisible(true);

    }

}

关键是下面的想法。如果您想要一个带有按钮和前面的东西的背景。告诉 JFrame 那是一个玻璃窗格。然后,您将与此窗格关联的按钮和对象设置为不透明且可见。这里的所有都是它的。

于 2013-07-05T19:55:09.043 回答