使用leftPanel,topPanel和bottomPanel设置JFrame

时间:2014-04-14 19:36:54

标签: java swing jframe jpanel

第一次在这里发帖,让我首先说我是一个Java菜鸟,我今年才开始在大学里学习。

所以无论如何,我必须为Tamagotchi项目创建一个UI,我正在尝试使用JFrame等创建它。

这就是我要创建的内容:enter image description here

到目前为止,这是我的代码:

import javax.swing.*;
import java.awt.*;

public class DogUI {

    private JFrame DogUI;
    private JPanel leftPanel, topPanel, bottomPanel, rightPanels;
    private JButton jb;
    private JLabel lb, lb1, lb2;

    public DogUI() {
        GUI();
    }

    public void GUI() {

        DogUI = new JFrame("Dog UI");
        DogUI.setSize(800, 600);
        DogUI.setResizable(false);

        leftPanel = new JPanel();
        leftPanel.setBackground(Color.green);
        leftPanel.setLayout(new BoxLayout(leftPanel, BoxLayout.Y_AXIS));

        topPanel = new JPanel();
        topPanel.setBackground(Color.white);

        bottomPanel = new JPanel();
        bottomPanel.setBackground(Color.red);

        rightPanels = new JPanel();
        rightPanels.setLayout(new BoxLayout(rightPanels, BoxLayout.X_AXIS));

        DogUI.setVisible(true);

        lb = new JLabel("Name: ");
        leftPanel.add(lb);

        lb1 = new JLabel("Image");
        topPanel.add(lb1);

        lb2 = new JLabel("Buttons");
        bottomPanel.add(lb2);

        rightPanels.add(topPanel);
        rightPanels.add(bottomPanel);

        DogUI.add(rightPanels);

    }

    public static void main(String [] args) {
        new DogUI();
    }
}

这就是我最终的结果:enter image description here

我确信这很简单,或者说我做错了,但如果可能的话,请尝试用外行的方式解释。

感谢。 克里斯。

3 个答案:

答案 0 :(得分:2)

  1. 您只是将rightPanels添加到框架中,而不是添加leftPanel
  2. rightPanel正在使用水平的X_AXIS。你想要Y_AXIS
  3. 添加leftPanel时,您需要将框架的布局设置为GridLayout(1, 2)。请参阅GridLayout
  4. 在添加所有组件之后
  5. setVisible
  6. 关注Java命名会议。变量以小写字母开头,使用驼峰套管。 DogUIdogUI
  7. Swing应用程序应该从Event Dispatch Thread(EDT)运行。您可以通过将main中的代码包装在SwingUtilities.invokeLater(...)中来完成此操作。请点击Initial Threads
  8. 了解更多信息

答案 1 :(得分:1)

听起来你想要一个带有BorderLayout的父JPanel。那个父JPanel包含另外两个面板,位于它的东侧和西侧。西侧可以包含您的进度面板,东侧包含另一个JPanel,其GridLayout为1列和2行,或者是BorderLayout。从那里你可以将另外两个JPanel添加到最后一个JPanel,它代表图片右侧的任何一个。

整体父JPanel也可以是一个包含2列和1行的GridLayout,但是BorderLayout可能看起来更好,因为您可能会发现应用程序的一侧可能不需要那么多空间并且可能限制它占用的空间。也许东面板也应该是BorderLayout,因为你的图像可能不会占用北侧的那么多空间,使得南侧的组件可以容纳其余部分的可用空间。

答案 2 :(得分:1)

尝试使用GridLayout。

public void GUI() {
    DogUI = new JFrame("Dog UI");
    DogUI.setSize(800, 600);
    DogUI.setResizable(false);
    DogUI.setLayout(new GridLayout(1,2));//1row 2col

    leftPanel = new JPanel();
    leftPanel.setBackground(Color.green);

    topPanel = new JPanel();
    topPanel.setBackground(Color.white);

    bottomPanel = new JPanel();
    bottomPanel.setBackground(Color.red);

    rightPanels = new JPanel();
    rightPanels.setLayout(new GridLayout(2,1));//2row 1col

    lb = new JLabel("Name: ");
    leftPanel.add(lb);

    lb1 = new JLabel("Image");
    topPanel.add(lb1);

    lb2 = new JLabel("Buttons");
    bottomPanel.add(lb2);

    rightPanels.add(topPanel);
    rightPanels.add(bottomPanel);

    DogUI.add(leftPanel);
    DogUI.add(rightPanels);

    DogUI.setVisible(true);
}