【问题标题】:Java - Draw a circle ON JButton and JTextAreaJava - 在 JButton 和 JTextArea 上画一个圆圈
【发布时间】:2015-04-14 03:10:37
【问题描述】:

所以我试图在按钮和文本区域上绘制一种椭圆形。是的,我不能只使用面板或框架是有原因的。

所以按钮和 textarea 上面已经有文本,出于程序的原因需要保留为按钮和 textarea。

到目前为止,我只有一个按钮来显示这个圆圈,但其他按钮都没有显示在圆圈中。并且 textareas 根本没有显示任何圆圈。

到目前为止我的按钮代码:

for (int i = 0; i < (label.length) / 2; i++) {
        butt = new JButton(label[i]); // label contains the text on button
        butt.setPreferredSize(new Dimension(83, 100));
        butt.add(smallPit); //smallpit is the circle graphics
        game.add(butt); // game is a panel
        // butt.setLayout(null);
    }
    for (int i = 6; i < label.length; i++) {
        butt = new JButton(label[i]);
        butt.setPreferredSize(new Dimension(83, 100));
        butt.add(smallPit);
        game.add(butt);
    }

文本区域代码

score2.setBounds(0, 50, 100, 210);
score1.setBounds(700, 50, 100, 210);
score2.add(scorePit);
score1.add(scorePit);

目前的结果:

【问题讨论】:

  • 对你为什么要达到这个目的的一些想法也可能允许使用提供不同的方法,你可能会尝试达到相同的结果
  • 抱歉,我刚刚意识到我的代码在我的笔记本电脑上,我正在桌面上输入这个问题。
  • score2.setBounds(0, 50, 100, 210); -- 不,永远不要对 JTextArea 这样做,因为这将完全阻止它在需要时滚动,并允许文本愉快地超出该区域的边界。改为设置其列和行属性。我担心您可能会在这里遇到其他 XY 问题。
  • 您的直觉可能是使用null 布局并在您的组件上调用setBounds(...) 以绝对定位放置它们,但我建议您不要这样做,因为这会导致非常不灵活的 GUI,虽然它们在一个平台上看起来不错,但在大多数其他平台或屏幕分辨率上看起来很糟糕,而且很难更新和维护。相反,您需要学习和学习布局管理器,然后嵌套 JPanel,每个 JPanel 都使用自己的布局管理器来创建在所有操作系统上看起来都不错的令人愉悦且复杂的 GUI。
  • 啊,它不需要滚动。它仅用作一种标签。

标签: java swing jbutton jtextarea


【解决方案1】:

我的猜测是这个butt.add(smallPit); 导致了你的问题。

我的猜测是smallPit 扩展自 JComponent(扩展自 JComponent),问题是组件只能驻留在单个容器中,所以每次调用 butt.add(smallPit);,@ 987654327@ 在添加到新容器之前已从其先前的容器中删除。

相反,创建一个smallPit 的实例(或者它是什么)并将它添加到每个需要它的按钮。

避免使用null 布局,像素完美的布局是现代用户界面设计中的一种错觉。影响组件单个尺寸的因素太多,您无法控制。 Swing 旨在与核心的布局管理器一起工作,丢弃这些将导致无穷无尽的问题和问题,您将花费越来越多的时间来尝试纠正

你也应该看看Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing?

【讨论】:

  • 您对 JTextArea 问题也有任何想法吗?
  • 同样的问题......但我不相信直接将组件“添加”到JTextArea 是一个好主意,但我不确定你想要实现什么所以很难知道什么是更好的解决方案
  • 我明白了。基本上,我只想在文本框中的文本“Mancala A”和“Mancala B”上添加一个圆圈。是的,仅使用“添加”是行不通的。什么都没有显示。
  • 这可能是因为JTextArea 没有布局管理器。如果您使用的是 Java 7+,我会考虑使用 JXLayerJLayer 之类的东西
  • 我不知道某个组件。 :0 我去看看。谢谢!
猜你喜欢
  • 2013-12-22
  • 2012-11-12
  • 1970-01-01
  • 2014-11-15
  • 2013-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多