我有一个包含JPanel的JavaJFrame。在该JPanel中,有两个独立的JPanel。当用户单击第一个JPanel中的按钮时,需要向另一个JPanel发送一条消息,通知它单击了哪个按钮。在这样的对象之间发送消息的最简单方法是什么? 最佳答案 对于mKorbel(和原始海报):我推荐的是更松散的耦合,一个JPanel不知道另一个JPanel,并且所有连接都是通过某种控件完成的。例如,借用你的一些代码:复制TextNorthPanel2.javaimportjava.awt.*;importjavax.swing.*;publi
在得知dispose()应该在Graphics/Graphics2D对象上调用后,我着手改变我的游戏以合并它.当我在JPanel的覆盖paintComponent(Graphicsg)中添加g2d.dispose()时,我添加的组件(扩展JLabel类)在没有呈现的地方我仍然可以点击它们等但它们不会被绘制。我用普通的JLabel和JButton进行了测试,效果相同(虽然JButton在鼠标悬停时呈现)。所以我的问题是为什么会发生这种情况?这是一个SSCCE来演示:在MainMenuPanel类的paintComponent中取消对dispose()的调用后:importjava.awt
我有一个JFrame的子类,它使用从JPanel扩展的类publicclassHelloWorldextendsJPanelimplementsKeyListener我将HelloWorld对象添加到框架-app.add(helloWorld);。现在,当我按下任何键盘键时,KeyListener方法都不会被调用,并且helloWorld似乎没有窗口焦点。我也尝试调用helloWorld.requestFocusInWindow();但仍然没有响应。如何让它响应按键? 最佳答案 您是否将HelloWorld面板的KeyListene
谁能解释一下JPanel.repaint()方法和JFrame.repaint()方法之间的区别,我想两者都调用了paintComponent()JPanel中的方法。请说明,谢谢 最佳答案 在任何组件上调用repaint()都会向重绘管理器添加一个请求以绘制该组件。如果条件正确,管理器将安排调用组件的paint(...)方法。由于Component的paint方法随后将调用paintComponent(...)、paintBorder(...)和paintChildren(...)这将使组件绘制自身、其边框和级联绘制递归到其所有子
我有一个带有paintComponent()函数的JPanel。我会调用它一次,然后当用户单击不同的JButton时,我会设置一些标志并想再次调用此函数,因为在设置标志后它会做一些稍微不同的事情。所以这就是我想知道的:如何清除paintComponent中的现有内容?要重绘,是否只需再次调用paintComponent即可?目前我正在尝试以下操作:flag2=true;repaint();//Iexpect(want)paintComponenttobecalledagain在paint组件中,我会做类似的事情:if(flag2==true){g.drawRect(...);}else
这个问题在这里已经有了答案:java-HowwouldIdynamicallyaddswingcomponenttoguionclick?(5个答案)关闭9年前。我是JavaSwing的新手。我对在Swing中动态添加组件有一些疑问。基本上我有一个MainJPanel由两个水平排列的子JPanel(leftpanel和rightpanel)组成。在左边JPanel我有一些JButtons,当我单击JButton时,我需要在右侧显示一些JLabel、JTextArea等J面板。我尝试了一个代码,但它不起作用。当我单击按钮时,它会进入事件监听器函数,但JLabel我无法查看。我在下面给出我
我有一个扩展JPanel的简单对象,当在这个对象上调用update()方法时,它意味着向面板添加一些标签,然后重新绘制.但是在调用更新方法后标签没有显示,下面是更新代码:publicvoidupdate(){GridBagConstraintsconstraints=newGridBagConstraints();if(cardsHidden){for(inti=0;i有什么想法吗?谢谢编辑已解决:事实证明,HoleCardsPanel没有正确添加到其父框架中。一旦解决了这个问题,添加新的JLabel就可以正常工作了。我也:使用SwingUtillities.invokeLater添加
我正在使用“代理”在ClojureGUI应用程序中扩展各种Swing类,通常使用如下代码:(def^JPanelmypanel(proxy[JPanel][](paintComponent[#^Graphicsg](.drawImagegbackground-image00nil))))这很好用,但我不知道如何向新扩展的类添加额外的字段,例如使背景图像成为一个可以随后更新的字段。这在Java中是非常简单和常见的做法。在Clojure中有实现此目的的好方法吗?或者是否有另一种首选方法可以达到相同的效果? 最佳答案 你可以这样使用:(d
我有一个非常简单的问题。我正在学习Java,并被分配画一辆汽车。我在一个扩展JPanel的类中完成了这一切,并在paintComponent()中完成了绘图。我意识到这是糟糕的面向对象编程,并决定尝试对某些部分进行子类化以纠正这种情况。我尝试创建一个画轮子的类,但没有成功。本质上,我希望能够做到这一点:MainClassextendsJPanelpaintComponent{WheelleftWheel=newWheel(0,50,100);this.add(leftWheel);}这应该在JPanel中的点(0,50)处绘制一个轮子,其直径为100。但是,我不确定我应该如何控制JPa
我正在尝试创建一个如下所示的布局:+---+--------+---+||||||||+---++---+||||||||+---+--------+---+中央单元格的宽度应是其他单元格的两倍。我正在尝试用这样的代码实现这一点:valpanel=newJPanel(newMigLayout("debug","grow","grow"))panel.add(newJPanel)panel.add(newJPanel,"span22")panel.add(newJPanel,"wrap")panel.add(newJPanel)panel.add(newJPanel)但结果我所有的单元格