Tag: jcomponent

Netbeans摆动不正确显示组件

您好,我的笔记本电脑Windows 8 64位有这个奇怪的问题。 Netbeans没有正确显示摆动组件。 http://postimg.org/image/qdean40pb/你可以看到文字不清楚(主机,连接按钮,断开按钮),我找不到这个的原因。 我想也许这是netbeans 8.0的问题,所以我尝试安装7.3,即使安装程序本身我也有同样的问题。(下一个按钮和其他文本) http://postimg.org/image/3nf5u4hhr/ 我在我的桌面Windows 7 32位上使用netbeans 7.3没有这样的问题。 你能帮我么 ? 谢谢

当组件在paintComponent()之外加载图像时,JFrame显示为空白; 方法

现在这可能听起来很奇怪,这也是我认为这是Java本身的一个错误的原因。 我目前正在为我的应用程序制作自定义组件。 这些组件( JComponent )覆盖paintComponent(); 方法。 出于某种原因,当我在组件中实现图像时,当使用任何这些组件时,框架显示为空白,我做了一些调试,我发现了以下内容:一旦这个覆盖方法中的代码绘制了一个存储的图像在方法本身之外的变量中,就像非静态类变量一样,框架在显示时将显示为空白,直到resize为止。 当使用存储在paintComponent();中的变量中的图像时,一切正常paintComponent(); 方法本身。 这里发生了什么,我怎么能解决这个问题? 我真的需要使用存储在类变量中的图像来缓存这些图像,否则一次又一次地加载每个图像将是非常高性能的。 类似于下面的代码的代码工作正常; public class MyComponent extends JComponent { @Override public void paintComponenet(Graphics g) { Image img = ImageIO.read(getClass().getResource(“/res/myImg.png”)); g.drawImage(img, 0, 0, null); } } 当使用这样的东西时,框架显示为空白; public class MyComponent extends JComponent { private Image img = ImageIO.read(getClass().getResource(“/res/myImg.png”)); @Override public void paintComponenet(Graphics g) { g.drawImage(img, 0, 0, […]

Keymap,InputMap,ActionMap,KeyListener – 选择重载

我无法找到关于所有这些之间关系的简明回答,以便我可以选择最佳实践并继续前进。 JTextComponent具有: 旧的addKeyListener(..) 。 我们编写一个KeyListener ,其方法可以在keyPressed(..) , keyTyped(..)等事件上调用,我们可以查询: event.getKeyCode() 。 addKeymap(..)和setKeymap(..) 。 Keymap有addActionForKeyStroke(..) ,它接受KeyStroke (我们可以通过调用指定字符或键代码的KeyStroke的静态方法获得)和Action ,它是一个带有铃声和口哨声的ActionListener 。 getInputMap(..)和getActionMap(..) 。 InputMap将KeyStroke (如上所示)映射到String , ActionMap将字符串映射到Action (如上所述)。 Java教程如何使用键绑定来讨论这个问题。 这是实现相同function的三种冗余方式。 除了比较优势/劣势之外,这还提出了这三种机制如何共存的自然问题? 哪些优先于其他?

JScrollPane滚动条不可滚动

我有一个类绘制一些非常简单的图形,如线条,圆形和矩形。 线条是动态可扩展的,有时当它们超出分辨率时,如果没有滚动条,就无法看到。 因此,我已将JScrollPane添加到我的JFrame中,但不幸的是,尽管已经调用了布局管理器,但滚动条仍无法滚动。 这就是我所拥有的: – 绘制组件(线,矩形,圆圈)的类 – 设置JFrame / JScrollPane的类 这是我的GUI类的摘录代码: JFrame frame = new JFrame(“GUIFrame”); frame.setLayout(new BorderLayout()); // Layout already set frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); DrawComponent comp = new DrawComponent(); // Reference to class that draw components JScrollPane sp = new JScrollPane(comp, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); sp.setPreferredSize(new Dimension(1000, 1000)); frame.add(sp, BorderLayout.CENTER); frame.setSize(500,500); frame.setVisible(true); 使用上面的代码,我有Java向我展示一个包含我的jcomponents的滚动窗口的JFrame。 我已将滚动条设置为始终如上所示,但它们不可滚动,灰色显示。 正如Andrew所说,我花了一些时间来创建一个SSCCE来反映我正在尝试做的事情: import java.awt.BorderLayout; import […]

如何垂直居中JTextPane中的文本和JComponent?

目前它看起来如此 怎么做它看起来如此? 以下是我的代码: JFrame f = new JFrame(); JTextPane textPane = new JTextPane(); JTextField component = new JTextField(” “); component.setMaximumSize(component.getPreferredSize()); textPane.setSelectionStart(textPane.getDocument().getLength()); textPane.setSelectionEnd(textPane.getDocument().getLength()); textPane.insertComponent(component); try { textPane.getDocument().insertString(textPane.getDocument().getLength(), “text”, new SimpleAttributeSet()); } catch (BadLocationException e) { // TODO Auto-generated catch block e.printStackTrace(); } f.add(new JScrollPane(textPane)); f.setSize(200, 100); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); 我发现接近这个主题的单个问题: JTextPane插入组件,错误的垂直对齐但是如何更改对齐没有答案。 但根据那里的讨论,它必须是可能的。

JComponent.paintImmediately()如何在Java Swing中工作?

我的理解:与Swing中的大多数组件/操作不同,对JComponent.repaint()的调用是线程安全的,即虽然重新绘制请求来自另一个线程(即不是来自EDT),但实际绘制仅在EDT中进行。 下面的代码片段演示了这一点。 public class PaintingDemo { public static void main(String[] args) { final JFrame frame = new JFrame(); final JPanel p = new MyPanel(); SwingUtilities.invokeLater(new Runnable() { @Override public void run() { frame.add(p, BorderLayout.CENTER); frame.setSize(200, 200); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }); new Thread(“MyThread”) { public void run() { while (true) { // Below statements are important […]

重写getPreferredSize()会破坏LSP

我总是在这个站点中看到覆盖getPreferredSize()建议,而不是使用setPreferredSize() ,例如这些先前的线程中所示。 使用重写getPreferredSize()而不是对固定大小的组件使用setPreferredSize() 我应该避免在Java Swing中使用set(Preferred | Maximum | Minimum)Size方法吗? 重写setPreferredSize()和getPreferredSize() 看这个例子: public class MyPanel extends JPanel{ private final Dimension dim = new Dimension(500,500); @Override public Dimension getPreferredSize(){ return new Dimension(dim); } public static void main(String args[]){ JComponent component = new MyPanel(); component.setPreferredSize(new Dimension(400,400)); System.out.println(component.getPreferredSize()); } } setPreferredSize() 设置此组件的首选大小。 getPreferredSize() 如果preferredSize已设置为非null值,则返回它 。 如果UI委托的getPreferredSize方法返回非null值,则返回该值; 否则遵从组件的布局管理器。 所以这样做显然打破了Liskov替代原则 。 […]

Java获取JPanel组件

我有一个充满JTextFields的JPanel …… for (int i=0; i<maxPoints; i++) { JTextField textField = new JTextField(); points.add(textField); } 我以后如何在该JPanel中获取JTextField? 就像我想要他们的价值观一样 TextField.getText(); 谢谢

更改Swing应用程序上所有按钮的光标

我有一个Swing应用程序,主框架和其他一些forms加载。 我需要实现一个通用方法来为任何表单上的所有按钮设置手形光标。 这类似于我们在网页上对css所做的事情( input[type=button] { cursor:pointer; } )

如何获得paint / paintComponent生成的图像?

我有一个快速的问题。 如何获取JComponent.paint或paintComponent生成的图像? 我有一个JComponent,我用它作为’工作区’,我已经覆盖了paintComponent方法到我自己的方法。 问题是我的工作区JComponent也有子项,它们有自己的paintComponent方法。 因此,当Swing渲染我的工作区组件时,它会渲染工作区图形,然后渲染其子图形。 但是,我想获取我的工作区组件生成的图像(包括工作区图形和子图形)。 我怎么做? 我试图通过使用我自己的Graphics自己调用paintComponent / paint-method,但我刚刚返回了一个黑色图像。 这是我尝试过的; public void paintComponent(Graphics g) { if (bufferedImage != null) { g.drawImage(bufferedImage, 0, 0, this); } else { g.setColor(Color.WHITE); g.fillRect(0, 0, bufferedImage.getWidth(), bufferedImage.getHeight()); } } public BufferedImage getImage() { BufferedImage hello = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_ARGB); Graphics g = hello.getGraphics(); paintComponent( g ); return hello; […]