标签: jcomponent

JPanel,JFrame,JComponent和JApplet之间的区别

我正在制作一个有趣的物理模拟器,当我试图弄清楚所有这些J之间的区别时,我正在查找图形教程.有人可以详细说明它们,或者提供一个有用的来源链接吗?

java jcomponent jpanel jframe japplet

43
推荐指数
3
解决办法
11万
查看次数

如何创建自定义Swing组件

我一直想用Java创建自定义组件,或者自定义现有组件,但我的搜索从未产生任何有用的东西.所以我决定问StackOverflow社区:

我在哪里可以找到有关自定义Java GUI组件的信息?

当我的意思是定制时,我不是在谈论改变颜色,字体等等.我的意思是真正定制它们.这是两个模型示例组件:

自定义组件样机

注释
我开始这个问题主要是为了找到如何创建上面两个自定义组件.但后来我意识到关于黑客摇摆组件的问题并不存在.所以我认为最好有一份资源清单.

如果您想知道模型中的两个组件如何工作,这里是:

一个自定义的JScrollPane,每个方向都有两个Scrollbar.每个滚动条的行为都不同.例如,外部滚动正常,内部滚动以类似Picasa的方式移动视图.事实上,我从谷歌组工作(!)答案在这里,但那只是代码.

第二个是自定义JComboBox,当扩展弹出列表时,它最后有一个JComponent.这可以是任何东西,从带有图标的简单JLabel到以某种方式操纵列表的JButton.

但这个问题不是关于那些具体的组成部分.它是关于寻找资源(网站,书籍,文章等)来学习如何创建它们.

java swing jcomponent

37
推荐指数
3
解决办法
4万
查看次数

是不是可以将Swing组件添加到多个容器中?

我正在尝试(测试其他东西)将一个JButton引用添加到两个中JPanels进行测试,它会从添加到的第一个面板中消失!

那么,不能将Swing组件添加到多个容器中吗?

先感谢您.

java swing jcomponent jpanel jbutton

26
推荐指数
2
解决办法
7081
查看次数

JSplitPane精确分裂50%

在Swing中,最好的方法是让JSplitPane分割两个jpanel,每个jpanel的大小为50%.

看起来如果我没有在面板上设置首选尺寸,它总是使第一个面板几乎不可见(2%),第二个面板几乎不可见(98%)

提前致谢

java swing jcomponent

25
推荐指数
3
解决办法
2万
查看次数

听众的哪一个适合可见性的JPanel被改变了

是否有一些规则,或好/坏经验AncestorListener,ComponentListenerHierarchyListener听取变化的可见性JPanelJComponents

其中一个比其他人更好还是更安全?我特别想知道何时以及如何JPanel/ JComponent隐藏.

请注意以下代码包含不正确的Swing规则,例如Thread.sleep(int)在这种情况下使用,允许我Listeners在Swing GUI中打印出正确的顺序

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.event.HierarchyEvent;
import java.awt.event.HierarchyListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.event.AncestorEvent;
import javax.swing.event.AncestorListener;

public class CardlayoutTest extends JFrame {

    private static final long serialVersionUID = 1L;
    public CardLayout card = new CardLayout();

    public CardlayoutTest() {
        JPanel pnlA = new JPanel(new BorderLayout());
        pnlA.add(new JButton("A"), BorderLayout.CENTER);
        JPanel pnlB = new JPanel(new …
Run Code Online (Sandbox Code Playgroud)

java swing jcomponent listener jpanel

23
推荐指数
1
解决办法
2万
查看次数

如何获取JFrame中的所有元素?

我有这个代码来获取我需要的所有元素并进行一些处理.问题是我需要指定每个面板来获取其中的元素.

for (Component c : panCrawling.getComponents()) {
    //processing
}
for (Component c : panFile.getComponents()) {
    //processing
}
for (Component c : panThread.getComponents()) {
    //processing
}
for (Component c : panLog.getComponents()) {
    //processing
}
//continue to all panels
Run Code Online (Sandbox Code Playgroud)

我想做这样的事情,并获得所有的元素,而不需要specefy所有的面板名称.我是怎么做到的 下面的代码没有获得所有元素.

for (Component c : this.getComponents()) {
    //processing
}
Run Code Online (Sandbox Code Playgroud)

java swing jcomponent

18
推荐指数
2
解决办法
3万
查看次数

MVC在Swing Thread中是否安全

我试图在Swing中触及MVC架构的限制,但是当我尝试所有(来自SwingWorkerRunnable#Thread)在EDT上完成时

我的问题:

  • 是否有一些限制或严格依赖于实现的顺序(包装SwingWorkerRunnable#Thread)?

  • 有限的是JComponent#方法线程安全吗?

  • Swing中MVC架构的本质特征是什么?

  • INC.集装箱重新布局?

注意:对于我,SSCCE我采取了一个很好的例子HFOE,并且可能通过严格控制这个原则是不可能创建任何EDT缺乏或GUI冻结

在此输入图像描述 在此输入图像描述 在此输入图像描述 在此输入图像描述

import java.awt.BorderLayout;
import java.awt.event.*;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.util.LinkedList;
import java.util.Queue;
import javax.swing.*;

public class MVC_ProgressBarThread {

    private MVC_ProgressBarThread() {
        MVC_View view = new MVC_View();
        MVC_Model model = new MVC_Model();
        MVC_Control control = new MVC_Control(view, model);
        view.setControl(control);
        JFrame frame = new JFrame("MVC_ProgressBarThread");
        frame.getContentPane().add(view);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        java.awt.EventQueue.invokeLater(new Runnable() …
Run Code Online (Sandbox Code Playgroud)

java model-view-controller swing jcomponent layout-manager

16
推荐指数
1
解决办法
2132
查看次数

Java获取JPanel组件

我有一个充满JTextFields的JPanel ......

for (int i=0; i<maxPoints; i++) {
    JTextField textField = new JTextField();
    points.add(textField);
}
Run Code Online (Sandbox Code Playgroud)

我以后如何在该JPanel中获取JTextField?就像我想要他们的价值观一样

TextField.getText();
Run Code Online (Sandbox Code Playgroud)

谢谢

java swing jcomponent jpanel jframe

14
推荐指数
3
解决办法
5万
查看次数

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 to show the difference
                    p.repaint();
                    p.paintImmediately(p.getBounds());
                    try {
                        Thread.sleep(1000);
                    } catch(Exception e) {}
                }
            }
        }.start();
    }

}

class MyPanel extends JPanel {
    @Override
    public …
Run Code Online (Sandbox Code Playgroud)

java swing multithreading jcomponent

11
推荐指数
1
解决办法
6858
查看次数

在JPanel和JComponent上绘画有什么好处?

所以在最近的一个回答中,有人评论过此(关于绘画):

"这可能是90%Swing程序员的某种疾病:当他们制作自己的组件时,他们总是扩展JPanel而不是JComponent.为什么?"

我仍然是编程方面的新手,所以我认为现在称自己为Swing程序员为时尚早,因为我尚未找到自己的位置.但压倒一切JPanel只是我教的方式.所以我开始找到"为什么?"的答案.评论者的问题.这些是我找到的一些答案.


背景画是主要的区别.JComponent类不绘制其背景,因此您必须在重写的paintComponent方法中绘制背景.相比之下,JPanel有一个不透明的背景,可以通过调用它的paintComponennt方法来绘制.


一些程序员喜欢扩展JPanel类,而不是扩展JComponent.JPanel旨在成为可以包含其他组件的容器,但也可以在其上绘制.只有一个区别.面板是不透明的,这意味着它负责绘制其边界内的所有像素.最简单的方法是使用背景颜色绘制面板,方法是在每个面板子类的paintComponent方法中调用super.paintComponent:


如果将opaque属性设置为true ...那么Swing绘图系统不必浪费时间尝试在组件后面进行绘制,从而提高性能.


我认为最后一句话真的解释得最好.但是,除了透明度外,还有其他有益的原因"90%的Swing程序员都有这样的疾病"延伸JPanel,而不是JComponent

java swing paint jcomponent jpanel

10
推荐指数
2
解决办法
1470
查看次数