Tag: jcomponent

在JPanel和JComponent中绘图

我需要一些帮助来理解为什么绘图在JComponent和JPanel中的工作方式不同。 import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JPanel; public class Particle extends JComponent implements Runnable{ private int x = 45; private int y = 45; private int cx; private int cy; private int size; private Color color; private JFrame frame; public Color getColor(){ return color = new Color(100,0,190); } public […]

如何重新计算JComponent的首选大小?

我知道当我创建一个JComponent的实例时,它有自己的首选大小。 现在让我们假设我使用0 x 0的维度手动setPreferredSize JComponent。我希望该组件“重置”它自己的preferredSize。 我怎么做?

摇摆中的球动画

问题是,当我调整JFrame的大小时,动画继续使用它为JComponent提供的预提供的维度。 有没有一种方法可以在我调整JFrame大小时更新我的width和height变量,以便动画可以与新的坐标一起运行。 简单来说,假设JComponent初始width = 300且height = 300 ,那么BALL会在这些指定Co-ordinates内移动。 现在,如果我调整JFrame的大小, JComponent的大小仍保持原样,即width = 300和height = 300 ,但我希望的是一种用当前窗口大小修改这些变量的方法。 如果我在解释我的问题时缺乏某些东西,请告诉我。 这是我正在使用的代码: import javax.swing.*; import java.awt.*; import java.awt.event.*; public class BallAnimation { private int x; private int y; private int count; private int width; private int height; private int speedValue; private boolean flag; /* * These variables are used to […]

在java中制作绘图应用程序的方法更简单?

所以基本上我有一些我几天前工作的代码,有点像Paint,它允许你使用鼠标在屏幕上绘制。 我偶然发现了这个属性,我意识到这是非常低效的,我想知道是否有更实际的方法来做到这一点。 没有任何理由可以提供我的所有代码,但这里是重要的部分 private static void createAndShowGui() { SimpleDraw mainPanel = new SimpleDraw(); MenuBar.createMenuBar(); JLabel label = new JLabel(); label.setText(“Drawing prototype 0.0.1”); // label.setHorizontalTextPosition(JLabel.NORTH); label.setFont(new Font(“Serif”, Font.BOLD, 20)); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(mainPanel); frame.pack(); frame.setLocationByPlatform(true); frame.getContentPane().setLayout(new BoxLayout(frame.getContentPane(),BoxLayout.PAGE_AXIS)); frame.setVisible(true); frame.setJMenuBar(MenuBar.getMenuBar()); frame.setBackground(Color.WHITE); frame.add(label); 上面的代码块设置了jframe(窗口) @Override public void mouseDragged(MouseEvent e) { // These console outputs are just so that I know […]

将JLabel放置在JPanel上的特定x,y坐标上

我正在尝试在JPanel上的特定X和Y坐标处放置一系列JLabel(并设置其高度和宽度)。 无论我做什么,每个标签都会立即卷到前一个标签的右侧,并且与所有其他标签的尺寸完全相同。 现在,我的Jpanel处于网格布局中。 我尝试过Absolute Layout(非法参数exception结果),Free Design(没有标签出现),Flow Layout(一切都被挤到中心),以及其他一些。 不知道我需要做些什么来使这项工作。 有人可以帮忙吗? 谢谢! JLabel lbl1 = new JLabel(“label 1”); JLabel lbl2 = new JLabel(“label 2”); JLabel lbl3 = new JLabel(“label 3”); JLabel lbl4 = new JLabel(“label 4”); JLabel lbl5 = new JLabel(“label 5”); myPanel.add(lbl1); myPanel.add(lbl2); myPanel.add(lbl3); myPanel.add(lbl4); myPanel.add(lbl5); lbl1.setLocation(27, 20); lbl2.setLocation(123, 20); lbl3.setLocation(273, 20); lbl4.setLocation(363, 20); lbl5.setLocation(453, 20); […]

防止Java在更新时重新绘制JPanel的内容

我有一个包含很多子组件的JPanel。 在更新\添加新组件到父JPanel时,我想阻止它重新绘制,这怎么能实现?

当有一个包含JButton的子组件时,JPanel不会监听键事件

我正在为我的大学项目编写地图编辑器。 而且我遇到了一个问题,即地图面板不应该正在监听关键事件。 当我添加一个ToolBarPane(扩展JPanel)时,会发生这种情况,例如JButton,JComboBox,它实现了ActionListener,地图面板(将JPanel扩展)一起放到了Frame(我使用了BorderLayout)。 我有System.out.println语句来测试是否收到按键,并且它不打印,如果我删除了ToolBar,键监听器再次工作,那么mouseListenner被禁用就像keyListener一样,这意味着我可以’ t处理新闻事件等,但mouseListener工作正常,我仍然可以处理鼠标移动事件。 这是一个没有ToolBarPane的屏幕截图 http://img684.imageshack.us/img684/3232/sampleku.png 请注意,您可以使用鼠标将图像放在地图上,您也可以像使用激光工具一样使用鼠标选择图像,按数字键可以在不同的图像之间切换,这样可以正常工作,直到我添加显示的ToolBarPane像这样: img291.imageshack.us/img291/8020/failve.png(请在此之前添加http,我只能发布一个超链接) (我不能在这里发布图片,因为我是新用户) 使用ToolBarPane,我无法再处理关键事件。 我想这可能是因为焦点已经以某种方式转移到该面板,但根本不确定。 身体是否知道这一点并且可以帮助我? 非常感谢

从JTextPane通过javax.swing.text.Element获取组件?

我使用JTextPane来显示字符和符号,后者由自定义绘制的JComponents表示。 例如,文本窗格可能显示如下内容: 文本窗格是用户可编辑的,允许用户通过任何位置的按钮添加更多符号,并替换所选文本。 我是通过JTextPane.insertComponent()方法完成的。 在应用程序的某个时刻,我需要知道文本窗格中当前显示的内容,并且我不仅指输入的文本,还指其中包含的确切组件。 我经历了与Positions和DocumentListeners广泛麻烦来管理我的文本窗格的内容,但是我一直造成比我解决的更多问题。 这就是为什么我最终决定,我的麻烦可能是由于我的设计错误,所以我决定看看,如果我无法通过文本窗格访问我的组件。 通过搜索AbstractDocument和其他相关类的文档和源代码,我找到了接口javax.swing.text.Element 。 然后我让我的应用程序输出 for(int i = 0; i < textPane.getDocument().getLength(); i++) { System.out.println(((StyledDocument) textPane.getDocument()).getCharacterElement(i)); } 这给了我: LeafElement(内容)0,4 LeafElement(内容)0,4 LeafElement(内容)0,4 LeafElement(内容)0,4 LeafElement(组件)4,5 LeafElement(内容)5,9 LeafElement(内容)5,9 LeafElement(内容)5,9 LeafElement(内容)5,9 LeafElement(组件)9,10 看到我所获得的LeafElements似乎有关于在Document中哪个位置显示的内容的某些信息,我认为必须能够获得该位置的实际内容。 在搜索了另外半小时后如何获得每个元素所代表的内容后,我放弃了并决定在这里发布我的问题,希望你们中的一些人可能知道如何实现这个目标! 我已经看到这个问题 ,有人试图通过textPane.getComponents()访问组件,它返回一个组件数组,其中包含JTextPane实际包含的组件的确切数量,但它们都是javax.swing.text.ComponentView$Invalidator类型javax.swing.text.ComponentView$Invalidator ,这显然对我没用。 也许我只是不知道如何从这里正确地继续,因为对我的符号的原始类型的强制转换不起作用。 TL;博士 如何获取JTextPane文本中的JComponent及其在文本窗格中的位置?

jScrollPane无法添加组件

我在表单上有一个jScrollPane和一个按钮。 该按钮将组件添加到jScrollPane 。 我正在使用具有中心对齐的FlowLayout来安排jScrollPane的组件。 第一个组件没有出现问题,并且完美对齐。 当我再次按下按钮时,似乎没有任何事情发生。 当我按照调试器时,它显示一切都像以前一样发生。 单击按钮时执行的代码: jScrollPane.getViewport().add(new Component()); 这是我在jScrollPane的Viewport上设置FlowLayout的方法: jScrollPane.getViewport().setLayout(new FlowLayout(FlowLayout.CENTER));

调用mouseClicked()后JComponents消失

我正在用Swing编写Java GUI程序。 界面如下所示: 当用户点击右侧的其中一张图片时,我希望它的小预览显示在左上角的橙色区域中。 我通过SwingWorker线程从计算机上的目录中提取所有图像文件。 在SwingWorker的done()方法中 ,我向每个对象添加一个mouseClicked侦听器(来自我创建的类的TaggableImage对象。它具有BufferedImage并扩展JComponent,覆盖paintComponent()方法)。 在mouseClicked监听器中,我调用橙色面板的add()方法并将其传递给TaggableImage。 我的问题: 当我点击其中一个图像时,它不会被添加到橙色面板,它会从右侧的面板中消失。 如果我单击所有图像,我将留下一个空白的右侧面板。 为什么会这样? 这是我的整个SwingWorker线程: SwingWorker<ArrayList, Void> loadImagesAsyncWorker = new SwingWorker<ArrayList, Void>() { ArrayList img_list = new ArrayList(); @Override protected ArrayList doInBackground() throws Exception { File currentDirectory = new File(“.”); getFileInDirectory(currentDirectory); return null; } // recursively get all files in this directory and child directories private void […]