java - 更改 JFrame 的内容很慢,还是我做错了?

标签 java swing awt

我做了这个小测试:(删除了所有与问题无关的内容)

package de.poller.StorrageBox;

import java.awt.Dimension;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class MainClass implements KeyListener {

    JFrame frame;
    JPanel panel1;
    JPanel panel2;

    public static void main(String[] args) {
        MainClass c=new MainClass();
    }

    public MainClass() {
        frame=new JFrame("test");
        frame.setSize(new Dimension(500, 500));
        frame.addKeyListener(this);

        panel1=new JPanel();
        JButton butt1=new JButton("test1111");
        panel1.add(butt1);

        panel2=new JPanel();
        JButton butt2=new JButton("test222");
        panel2.add(butt2);

        frame.add(panel1);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        frame.requestFocus();

    }


    @Override
    public void keyPressed(KeyEvent arg0) {

        if(arg0.getKeyChar()=='a') {
            activate1();
            val();
        }
        if(arg0.getKeyChar()=='b') {
            activate2();
            val();
        }
    }

    private void activate2() {
        frame.remove(panel1);
        frame.add(panel2);
    }

    private void activate1() {
        frame.remove(panel2);
        frame.add(panel1);
    }

    private void val() {
        frame.revalidate();
        frame.requestFocus();
    }


    public void keyReleased(KeyEvent arg0) {}


    public void keyTyped(KeyEvent arg0) {}

}

从面板 1 到面板 2 的第一次更改是可以的,但如果我切换回面板 1,则需要相当长的时间(比我希望用户等待的时间长),而且这只是一个只有一个按钮的面板。没有计划中的完整图形用户界面。

这里的问题是:是重新验证(我认为是这个过程)太慢还是我做错了什么?

最佳答案

感谢 ControllAltDel 的解决方案:

(卡片布局)

package de.poller.StorrageBox;

import java.awt.CardLayout;
import java.awt.Dimension;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class MainClass implements KeyListener {

    JFrame frame;
    JPanel panel;

    JPanel panel1;
    JPanel panel2;

    public static void main(String[] args) {
        MainClass c=new MainClass();
    }

    public MainClass() {
        frame=new JFrame("test");
        frame.setSize(new Dimension(500, 500));
        frame.addKeyListener(this);

        panel=new JPanel(new CardLayout());
        frame.add(panel);

        panel1=new JPanel();
        JButton butt1=new JButton("test1111");
        panel1.add(butt1);

        panel2=new JPanel();
        JButton butt2=new JButton("test222");
        panel2.add(butt2);

        panel.add(panel1,"1");
        panel.add(panel2,"2");

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        frame.requestFocus();

    }


    public void keyPressed(KeyEvent arg0) {

        if(arg0.getKeyChar()=='a') {
            activate1();
        }
        if(arg0.getKeyChar()=='b') {
            activate2();
        }
    }

    private void activate2() {
        CardLayout cl=(CardLayout)(panel.getLayout());
        cl.show(panel, "2");
    }

    private void activate1() {
        CardLayout cl=(CardLayout)(panel.getLayout());
        cl.show(panel, "1");
    }

    public void keyReleased(KeyEvent arg0) {}

    public void keyTyped(KeyEvent arg0) {}

}

关于java - 更改 JFrame 的内容很慢,还是我做错了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42515439/

相关文章:

java - Linux 从 Java 控制台应用程序中杀死 Java 进程

java - 减少 ToStringBuilder (apache commons) 的内存使用?

java - Scala/Java 中的等价锁?

Java JFrame 绘制

Linux (Ubuntu) 中的 Java 系统托盘应用程序从服务(守护程序)启动

java - 在 JPanel 上绘制多个形状

Java:JTextField不会出现

java - 当我在 Java 中隐藏 JButton 边框时,为什么我的文本会消失?

java - jTabbedPane 将焦点转移到下一张纸

java - JMenu 在绘制图像的 JPanel 上方留下一个灰色框