【问题标题】:SetBounds not working properlySetBounds 无法正常工作
【发布时间】:2014-11-06 16:31:05
【问题描述】:

我想制作 3 个面板,其中一个在西侧,一个在东侧,一个在南侧。当我遵守这一点时,它给了我一个颜色叠加的框架,它没有给我按钮。

frame = new JFrame();
frame.setBounds(600, 200, 500, 350);
frame.setTitle("Dr. Idrizovic");
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

panelWest = new JPanel();
panelWest.setBounds(0, 0, 175, 310);
panelWest.setLayout(null);
panelWest.setBackground(Color.green);   

regUslugaButt = new JButton("Registar usluga");
regUslugaButt.setBounds(12, 35, 150, 25);

regMaterijalaButt = new JButton("Registar materijala");
regMaterijalaButt.setBounds(12, 95, 150, 25);

regIntervencijaButt = new JButton("Registar intervencija");
regIntervencijaButt.setBounds(12, 155, 150, 25);

regDijagnozaButt = new JButton("Registar dijagnoza");
regDijagnozaButt.setBounds(12, 215, 150, 25);


panelEast = new JPanel();
panelEast.setBounds(325, 0, 175, 310);
panelEast.setLayout(null);
panelEast.setBackground(Color.red);

evidencijaPacButt = new JButton("Evidencija pacijenata");
evidencijaPacButt.setBounds(324, 35, 150, 25);

zakazivanjePacButt = new JButton("Zakazivanje pacijenata");
zakazivanjePacButt.setBounds(12, 95, 150, 25);

evidencijaStomatologaButt = new JButton("Evidencija stomatologa");
evidencijaStomatologaButt.setBounds(12, 155, 150, 25);

izvrseneUslugeButt = new JButton("Izvrsene usluge");
izvrseneUslugeButt.setBounds(12, 215, 150, 25);






panelSouth = new JPanel();
panelSouth.setBounds(175, 310, 150, 40);
panelSouth.setLayout(null);
panelSouth.setBackground(Color.black);

exitButt = new JButton("Kraj rada");
exitButt.setBounds(174, 260, 150, 25);






panelWest.add(regUslugaButt);
panelWest.add(regMaterijalaButt);
panelWest.add(regIntervencijaButt);
panelWest.add(regDijagnozaButt);

panelEast.add(evidencijaPacButt);
panelEast.add(zakazivanjePacButt);
panelEast.add(evidencijaStomatologaButt);
panelEast.add(izvrseneUslugeButt);

panelSouth.add(exitButt);

frame.add(panelWest);
frame.add(panelSouth);
frame.add(panelEast);

【问题讨论】:

  • 1) 为了尽快获得更好的帮助,请发布MCVE(最小完整可验证示例)。 2) 提供 ASCII 艺术,或简单的图形,GUI 的布局。
  • 避免使用null 布局,像素完美的布局是现代用户界面设计中的一种错觉。影响组件单个尺寸的因素太多,您无法控制。 Swing 旨在与核心的布局管理器一起工作,丢弃这些将导致无穷无尽的问题和问题,您将花费越来越多的时间来尝试纠正。更多详情请见Why is it frowned upon to use a null layout in SWING?

标签: java swing jframe jpanel


【解决方案1】:

我想制作 3 个面板,其中一个在西侧,一个在东侧,一个在南侧。

不要使用空布局。不要使用 setBounds()。

相反,您应该为主面板使用BorderLayout。您的子面板也应该使用适当的布局管理器。

【讨论】:

  • 不,因为它没有给我想要的界面。我可以为面板设置边界,然后在其中为按钮使用布局吗?
  • 然后对主布局使用不同的布局管理器。一旦你学会使用布局管理器,它们就会变得非常灵活。
  • 为什么 setBounds() 没用?
  • 阅读教程!!! Swing 被设计为与布局管理器一起使用,原因有很多。例如,手动尝试设置组件的大小/位置在不同的平台上不起作用,因为每个平台使用不同的字体。滚动不起作用。花时间学习创建可重用/可维护的代码,而不是使用不可维护的蛮力代码。
  • @vulovicv 这里是空布局的官方教程:docs.oracle.com/javase/tutorial/uiswing/layout/none.html 第一行是“不要使用空布局。”
【解决方案2】:

您有一个 JFrame,您需要为您拥有的框架设置布局,如下所示:

          frame.setLayout(new BorderLayout());

然后你需要在你喜欢的位置添加每个面板,像这样:

    frame.add(panelWest, BorderLayout.WEST);

最后记住这一点,当你已经设置了所有面板的所有属性时。

【讨论】:

  • BorderLayout 是 JFrame 的默认布局,因此您无需手动设置。本教程已经包含所有这些信息。
猜你喜欢
  • 2016-12-01
  • 2023-02-14
  • 1970-01-01
  • 2016-09-01
  • 2012-07-11
  • 2018-04-08
  • 2017-04-20
  • 2018-10-02
  • 2016-09-04
相关资源
最近更新 更多