相关疑难解决方法(0)

为什么swing会简单地绘制两次?

这是绘制椭圆形的简单示例.

public class SwingPainter extends JFrame{
    public SwingPainter() {
        super("Swing Painter");
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        getContentPane().add(new MySwingComponent());

        setSize(200, 200);
        setVisible(true);
    }

    public static void main(String[] args) {
        new SwingPainter();
    }

    class MySwingComponent extends JComponent {

         public void paintComponent(Graphics g) {
            System.out.println("paintComponent");
            super.paintComponent(g);
            g.setColor(Color.red);
            g.fillOval(10, 10, 50, 50);
        }

        @Override
        protected void paintBorder(Graphics g) {
            System.out.println("Paint border");
            super.paintBorder(g);
        }

        @Override
        protected void paintChildren(Graphics g) {
            System.out.println("Paint children");
            super.paintChildren(g);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是在调试模式或在绘制之前向控制台添加一些信息(如示例中),您可以看到swing绘制组件两次.

的paintComponent

油漆边框

画儿童

的paintComponent

油漆边框

画儿童

我无法理解它为什么会发生,但我认为它会影响困难的GUI中的性能.

java graphics swing awt paintcomponent

7
推荐指数
1
解决办法
1238
查看次数

JPanel重绘问题

我有一个JFrame,其中包含2个JPanel子类和BorderLayout中的2个JLabel.其中一个JPanel包含JButtons,另一个用于显示图形.JLabels位于北部和南部,西部是JPanel按钮,中间是JPanel.

显示JPanel需要不断刷新,所以我通过swing计时器生成的动作事件调用它的repaint()方法.我也覆盖它的paintComponent()方法来做我的绘图.

而不是显示我绘制的内容,"JFrame的内容"被绘制到显示JPanel上.我知道在完成绘图之前,我可以通过使用g.fillRect()或super.paintComponent()简单地"清除"显示JPanel.

我只是好奇为什么会这样.

我正在使用jdk 1.6u27.下面是我的代码:

package test;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class Main {

public static void main(String[] args) {
    Simulation sim = new Simulation();

    }
}

class Simulation extends JFrame {

    public JLabel state;
    private JLabel id;
    private ButtonPanel control;
    private Display display;

    public Simulation() {
        id = new JLabel("Test");
        state = new JLabel("Test");
        control = new ButtonPanel();
        display = new Display(this);

        this.setLayout(new BorderLayout());
        this.add(id, BorderLayout.NORTH);
        this.add(control, BorderLayout.WEST);
        this.add(display, BorderLayout.CENTER);
        this.add(state, BorderLayout.SOUTH);

        this.setSize(500, …
Run Code Online (Sandbox Code Playgroud)

java swing jpanel jframe

6
推荐指数
1
解决办法
4168
查看次数

为什么更好地附加JPanel?

我刚刚开始编写视频游戏编码,我听说在JPanel上绘制所有绘图并将该面板附加到JFrame上比简单地绘制JFrame更好.我只是想知道为什么这样更好?

java swing jpanel jframe

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

JMenuItem ImageIcon太大了

我遇到了一个问题.我的图像太大,所以它扩大了相应的JMenuItem.我不想开发自行车

ImageIcon image = new ImageIcon(new ImageIcon("/home/template/img.jpg")
        .getImage().getScaledInstance(32, 32, Image.SCALE_DEFAULT));
Run Code Online (Sandbox Code Playgroud)

还有其他方法可以实现吗?

java swing

4
推荐指数
1
解决办法
8186
查看次数

Java2D神器?

我正在使用Java2D进行我正在编写的游戏,并且在我开始将其与其他swing组件集成之前没有遇到任何问题.我的问题是当我添加到JFrame的第一个组件不是我正在绘制的画布时,当我将鼠标悬停在文本窗格的滚动条上时,我会看到一个奇怪的神器.每次执行应用程序时都会发生这种情况.当我第一次使用画布时,没有问题.

出于某种原因,这似乎只发生在Windows上,当使用默认的Java2D管道时(恰好是sun.java2d.d3d = true),并且会发生工件.当我设置sun.java2d.opengl = true或sun.java2d.noddraw = false AND sun.java2d.d3d = false时,它不会发生.

我猜这是Direct3D Java2D管道的某种错误?我可以轻松地解决它,但很想知道是否有其他人遇到过这样的问题?我正在运行最新的JDK7u7,但它也适用于以前的版本.我应该注意,如果我最小化窗口并恢复它,那么工件就会消失,并且在我重新启动应用程序之前永远不会返回.

有神器: 坏

没有工件(首先添加画布而不是JLabel图像): 好

如果有人对此有任何进一步的信息,我会很感激.谢谢!

java swing java-2d

3
推荐指数
1
解决办法
506
查看次数

Java容器删除方法无法正常工作

我hava添加1.TextArea 2.TextField然后我开始在容器上连续添加JButton ...,现在通过使用JRadioButton我想使用此代码从容器中删除JButton

i=0;
k=0;
while(!birdButton[i].isSelected()){
    i++;    
}   
System.out.println(i);
k=i+2;
list.removeElementAt(i);
listName.removeElementAt(i);
System.out.println(k);
c.getContentPane().remove(k);
Run Code Online (Sandbox Code Playgroud)

但是当我选择第一个radiobutton时,由于k = i + 2,应该删除第一个JButton; 而不是删除这个删除TextArea(第一个).当我选择第3个radiobutton时,第1个JButton被删除.任何人都可以让我知道问题是什么?并且也System.out.println(i); System.out.println(k);没有打印任何值....这是代码

public class RadioDemo implements ActionListener {

    String buttonName;
    JPanel radioPanel = new JPanel();
    ButtonGroup group = new ButtonGroup();
    Enumeration enl;
    int result;
    ActionEvent e;
    JRadioButton birdButton[];
    int i, k;

    Vector<String> listName;
    Vector<JComponent> list;
    Container c;

    public RadioDemo(Vector<String> listName,Vector<JComponent> list,Container c) {

        birdButton=new JRadioButton[listName.size()];
        this.listName=listName;
        this.c=c;
        this.list=list;

        i = 0;
        for (String buttonName : listName){
               birdButton[i] = new …
Run Code Online (Sandbox Code Playgroud)

java swing jpanel jframe

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

SwingPropertyChangeSupport动态更新JTextArea

我正在尝试建立有关SwingPropertyChangeSupport的问题的答案

我试图在非常有用的Hovercraft Full Of Eels的答案中修改这里给出的代码: WindowListener不能按预期工作,以允许在通过输入对话框输入更改时更新显示的数组.

数组已更新,但未在GUI中刷新.我希望有人能告诉我哪里出错了.

这是代码:

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.event.SwingPropertyChangeSupport;

public class Main {
public static void main(String[] arg) {
    GuiForUpdate display = new GuiForUpdate();
    display.setVisible(true);
}
}

class GuiForUpdate extends JFrame implements ActionListener {

/**
 * 
 */
private static final long serialVersionUID = 1L;
private FocusListener focusListener;
private String mList;
private JButton changeArrayButton;
private JTextArea codeIn, …
Run Code Online (Sandbox Code Playgroud)

java arrays swing refresh

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

屏幕上鼠标位置周围区域的缩放框

有没有办法在Java中创建一个动态缩放框,其中包括例如光标周围的20x20pix区域(但即使光标将移动到应用程序框架之外)并且将在例如小型JPanel中显示?

我在询问Color Chooser程序的背景下.需要实现的最后一个功能就是Zoom Box.

java swing awt zoom jpanel

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

标签 统计

java ×8

swing ×8

jpanel ×4

jframe ×3

awt ×2

arrays ×1

graphics ×1

java-2d ×1

paintcomponent ×1

refresh ×1

zoom ×1