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