【问题标题】:Trying to layout JPanels. Java program layout changes every time I run试图布局 JPanel。每次运行时 Java 程序布局都会发生变化
【发布时间】:2014-05-27 14:57:54
【问题描述】:

第一次发帖,请放心。

我是 Java 新手,正在尝试让 3 个 JPanel 相互排列。第一个图像是我希望它的外观,有时在我运行程序时它会显示,但正如您从其他图像中看到的那样,它不会在我每次运行时都对齐。有时甚至不显示某些图像/组件。

那么我怎样才能让三个 JPanel 一个接一个地垂直排列呢?

import java.awt.event.ActionListener;
import java.awt.*;

import javax.swing.*;

public class FrameMain {

    static final int MY_MINIMUM = 0;

    static final int MY_MAXIMUM = 100;

        public static void main(String[] args) {


          JFrame frame1 = new JFrame("Harvest Frame Test");
          frame1.setVisible(true);
          frame1.setSize(800,700);
          frame1.setResizable(false);
          frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

          //Container Panel

          JPanel container = new JPanel();
          container.setSize(800,700);
          container.setLayout(new BoxLayout(container, BoxLayout.Y_AXIS));
          frame1.add(container);



          //First Panel

          JPanel panel1 = new JPanel();
          panel1.setAlignmentX( Component.LEFT_ALIGNMENT );//0.0



          container.add(panel1);

          JButton button1 = new JButton("Add Water");
          panel1.add(button1);
          JButton button2 = new JButton("Add Food");
          panel1.add(button2);
          JButton button3 = new JButton("Add Medicine");
          panel1.add(button3);

          ImageIcon image = new ImageIcon("C:/Users/Nick/Documents/EclipseArt/plant.gif");
          JLabel imagelabel = new JLabel(image);
          panel1.add(imagelabel);

          JProgressBar pbar = new JProgressBar();
          pbar.setMinimum(MY_MINIMUM);
          pbar.setMaximum(MY_MAXIMUM);
          // add to JPanel
          panel1.add(pbar);

          // Second Panel

          JPanel panel2 = new JPanel();
          panel2.setAlignmentX( Component.LEFT_ALIGNMENT );//0.0


          container.add(panel2);

          JButton button4 = new JButton("Add Water");
          panel2.add(button4);
          JButton button5 = new JButton("Add Food");
          panel2.add(button5);
          JButton button6 = new JButton("Add Medicine");
          panel2.add(button6);

          ImageIcon image1 = new ImageIcon("C:/Users/Nick/Documents/EclipseArt/plant.gif");
          JLabel imagelabel1 = new JLabel(image1);
          panel2.add(imagelabel1);

          JProgressBar pbar1 = new JProgressBar();
          pbar1.setMinimum(MY_MINIMUM);
          pbar1.setMaximum(MY_MAXIMUM);
          // add to JPanel
          panel2.add(pbar1);

          // Third Panel

          JPanel panel3 = new JPanel();
          panel3.setAlignmentX( Component.LEFT_ALIGNMENT );//0.0

          container.add(panel3);

          JButton button7 = new JButton("Add Water");
          panel3.add(button7);
          JButton button8 = new JButton("Add Food");
          panel3.add(button8);
          JButton button9 = new JButton("Add Medicine");
          panel3.add(button9);

          ImageIcon image2 = new ImageIcon("C:/Users/Nick/Documents/EclipseArt/plant.gif");
          JLabel imagelabel2 = new JLabel(image2);
          panel3.add(imagelabel2);

          JProgressBar pbar2 = new JProgressBar();
          pbar2.setMinimum(MY_MINIMUM);
          pbar2.setMaximum(MY_MAXIMUM);
          // add to JPanel
          panel3.add(pbar2);

    }

    //static class Action implements ActionListener {

        //public void actionPerformed (ActionEvent e){



        //}

        //}

    }

【问题讨论】:

  • 你试过 .pack() 看看有没有效果?
  • 你能发布图片和MCVE吗?

标签: java swing layout jpanel


【解决方案1】:

frame1.setVisible(true); 一直移动到底部。在已经可见的框架上更改组件可能会导致问题。

【讨论】:

    猜你喜欢
    • 2016-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多