Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 简单JPanel的麻烦_Java_Swing_Awt - Fatal编程技术网

Java 简单JPanel的麻烦

Java 简单JPanel的麻烦,java,swing,awt,Java,Swing,Awt,我有一个JFrame,我需要在我喜欢的地方添加面板,但我不知道怎么做。我已经尝试了所有的布局,但我不能得到我想要的 基本上,FunProgramming是主框架,我需要在该框架上另外3个面板。我需要中间/右边的一个。我需要一个面板在左边,一个在底部,大约1/3在框架上。在尝试了不同的布局管理器之后,我不确定如何进行此操作(同样抱歉,我似乎无法将这两个类分开,第一个类现在缺少一个{) 链接到我需要的 现在不需要侧边的按钮 类似于 import java.awt.Color; import java

我有一个JFrame,我需要在我喜欢的地方添加面板,但我不知道怎么做。我已经尝试了所有的布局,但我不能得到我想要的

基本上,FunProgramming是主框架,我需要在该框架上另外3个面板。我需要中间/右边的一个。我需要一个面板在左边,一个在底部,大约1/3在框架上。在尝试了不同的布局管理器之后,我不确定如何进行此操作(同样抱歉,我似乎无法将这两个类分开,第一个类现在缺少一个{)

链接到我需要的 现在不需要侧边的按钮

类似于

import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.LineBorder;

public class Test {

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

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new ContentPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class ContentPane extends JPanel {

        public ContentPane() {
            setLayout(new GridBagLayout());
            GridBagConstraints gbc = new GridBagConstraints();
            gbc.gridx = 0;
            gbc.gridy = 0;
            gbc.fill = GridBagConstraints.BOTH;
            gbc.weighty = 0.7;
            add(new TestPane(Color.RED), gbc);
            gbc.weightx = 1;
            gbc.fill = GridBagConstraints.BOTH;
            gbc.gridx++;
            add(new TestPane(Color.BLUE), gbc);

            gbc.gridy = 1;
            gbc.gridx = 0;
            gbc.weighty = 0.3;
            gbc.weightx = 1;
            gbc.gridwidth = GridBagConstraints.REMAINDER;
            gbc.fill = GridBagConstraints.BOTH;
            gbc.anchor = GridBagConstraints.NORTH;
            add(new TestPane(Color.GREEN), gbc);
        }

    }

    public class TestPane extends JPanel {

        public TestPane(Color color) {
            setBorder(new LineBorder(color));
        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(200, 200);
        }

    }

}


您可以让主框架成为边框布局

按如下方式放置控制台面板:

frame.add(consolePanel, BorderLayout.WEST);
consolePanel.setPreferredSize(100, 400);

我猜你可以从那里得到它。

你可以试试这样的东西:

public class Test {
public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            JFrame f = new JFrame();
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            MBar mBar = new MBar();

            TextAreaPanel scrPan = new TextAreaPanel();
            BottomPan pan = new BottomPan();
            ButtonsPanel buttsCon = new ButtonsPanel();

            f.setJMenuBar(mBar);

            f.getContentPane().add(buttsCon, BorderLayout.LINE_START);
            f.getContentPane().add(scrPan, BorderLayout.CENTER);
            f.getContentPane().add(pan, BorderLayout.PAGE_END);
            f.pack();
            f.setVisible(true);
        }
    });
  }
}
ButtonsPanel.java

public class ButtonsPanel extends JPanel {
    public ButtonsPanel() {
        setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
        add(Box.createHorizontalStrut(50));

        JPanel butts = new JPanel();
        butts.setLayout(new BoxLayout(butts, BoxLayout.Y_AXIS));
        butts.add(Box.createVerticalStrut(30));
        for (int i = 0; i < 5; i++) {
            JButton butt = new JButton("Button " + String.valueOf(i));
            butts.add(butt);
            butts.add(Box.createVerticalStrut(10));
        }
        butts.setAlignmentY(JPanel.TOP_ALIGNMENT);
        butts.add(Box.createVerticalStrut(40));

        add(butts);
        add(Box.createHorizontalStrut(50));
    }
}
public class TextAreaPanel extends JScrollPane {
    public TextAreaPanel() {
        JTextArea jtxtArea = new JTextArea();
        setViewportView(jtxtArea);
    }
}
BottomPan.java

public class BottomPan extends JPanel {
    public BottomPan() {
        setBackground(Color.black);
        setPreferredSize(new Dimension(100, 100));
    }
}
MBar.java

public class MBar extends JMenuBar {
    public MBar() {
        for (int i = 0; i < 5; i++) {
            JMenuItem mi = new JMenuItem("Menu Item " + String.valueOf(i));
            add(mi);
        }

    }
}
public class MBar扩展JMenuBar{
公共MBar(){
对于(int i=0;i<5;i++){
JMenuItem mi=newjmenuItem(“菜单项”+String.valueOf(i));
添加(mi);
}
}
}

别忘了,你也可以在面板中设置面板。我想我在大多数情况下都做得很好,我只是不知道如何将面板放置在我想要的位置,我尝试过布局管理器,但它们似乎不起作用儿子,我有点笨!非常感谢你,我会尝试这个:)我尝试了一些解决方案,包括这个,但是每个小组都需要是一个独立的类,我无法让它工作。那么?我的小组不是添加了独立的类吗?除非你能提供一个可运行的例子,说明你的问题,否则几乎不可能提出可能对你有帮助的建议。是的,我自己也有这样的一天:至少其他人有这样的机会:李尝试了BorderLayout,它对我尝试做的事情不起作用。请看(是的。)感谢有趣的链接!我希望尽快抽出时间研究各种论点。我倾向于认识到不同的布局对这些方法的处理方式不同(这一直是调试Swing布局时出现一些混乱的原因,直到我发现缺乏一致性为止)过度构建自定义或使用第三方布局。但是对于不同的策略有很好的理由。但是,有些人确实对自己的立场很武断!对我来说,这是过分的。几乎每一个建议都有一个有效的反例,imho(一个真实世界的观察)这有助于分配,但他们需要每个窗格都是一个单独的类,我无法让他们work@Spatulord,我已经编辑了我的答案,现在所有组件都在不同的类中,您可能还应该使用
JScrollPane
作为
BottomPan
ButtonsPan
public class MBar extends JMenuBar {
    public MBar() {
        for (int i = 0; i < 5; i++) {
            JMenuItem mi = new JMenuItem("Menu Item " + String.valueOf(i));
            add(mi);
        }

    }
}