gpt4 book ai didi

java - 将 2 个 jpanels 放入 borderlayout

转载 作者:行者123 更新时间:2023-12-01 18:16:43 25 4
gpt4 key购买 nike

我正在尝试将 2 个 JPanel 放入 borderLayout 中。这样,一个 JPanel 的大小为 pane1(600,600),另一个 JPanel 的大小为 pane2(200,600)。我希望将它们打包,使大的在左边,另一个在右边。我正在设置每个 jpane 的大小,但看起来它们都占据了完整的空间并且彼此重叠。

我是个新手,不知道出了什么问题。任何帮助表示赞赏。 JFrame frame = new JFrame("Simple Graph");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
int pane1_width = FRAME_WIDTH-200;//800-200
Pane1 myPlots = new Pane1(graph_panel_size, FRAME_HEIGHT);<br/>
frame.add(myPlots);
Pane2 simpleInfo = new Pane2(200,FRAME_HEIGHT);
frame.add(simpleInfo);
frame.pack();
frame.setSize(FRAME_WIDTH, FRAME_HEIGHT);
frame.setResizable(false);
frame.setVisible(true);

这是一个基础框架类。对于 JPanel

public Pane2(int width,int height){<br/>
this.setSize(width,height);
Border blackline = BorderFactory.createTitledBorder("ola");
this.setBorder(blackline);

另一个面板也有类似的构造函数。但两个 Jpanels 相互重叠,我无法将它们分开放置。

最佳答案

问题是您正在调用setSize()。当使用 LayoutManager 时(你绝对应该这样做),使用 setSize/setBounds/setLocation 是完全没有用的。

此外,不建议调用 setPreferredSize()/setMinimumSize/setMaximumSize,并且可能会适得其反。

或者您的组件有充分的理由具有给定的大小(例如,因为您正在执行自定义绘制),那么您应该覆盖 getPreferredSize,或者您根本不需要执行任何操作,并且仅使用适当的 LayoutManager

您还可以check out the tutorial on LayoutManager of Oracle

查看此示例,其中覆盖了 getPreferredSize():

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class TestCustomPainting {

private static class MyTriangle extends JPanel {

private final int width;
private final int height;

public MyTriangle(int width, int height) {
this.width = width;
this.height = height;
}

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

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.GREEN);
g.fillPolygon(new int[] { 0, getWidth(), 0 }, new int[] { 0, 0, getHeight() }, 3);
}

}

protected static void initUI() {
JFrame frame = new JFrame("test");
frame.add(new MyTriangle(200, 45), BorderLayout.EAST);
frame.add(new MyTriangle(85, 600), BorderLayout.WEST);
frame.pack();
frame.setVisible(true);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {

@Override
public void run() {
initUI();
}
});
}
}

注意:我必须承认,还有更有趣的东西可以画:-)

关于java - 将 2 个 jpanels 放入 borderlayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29084308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com