gpt4 book ai didi

使用 JFileChooser 后 Java JSlider 不显示

转载 作者:行者123 更新时间:2023-12-02 09:43:56 24 4
gpt4 key购买 nike

当我使用 JFileChooser 然后尝试添加其他组件时,它们不会显示。如果我删除 JFileChooser,它们就会出现。我在eclipse上用java编写,有两个文件。

我已经删除了大部分代码以简化问题,但它仍然存在。

Main.java:

import java.awt.Color;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import javax.swing.JFrame;

public class Main {
public static void main(String args[]) throws InterruptedException, IOException {
int width = 1280;
int height = 720;

Frame f = new Frame(Color.BLACK, width, height);
JFrame frame = new JFrame("Title"); //create a new window and set title on window
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //set the window to close when the cross in the corner is pressed
frame.setSize(width,height);

frame.add(f); //add the content of the game object to the window
frame.setVisible(true);

long interval = (long)10 * 10000000;
long t = 0;
while(true) {
if(System.nanoTime() - t >= interval) { //repaints at a certain fps
t = System.nanoTime();
f.repaint();
}
TimeUnit.NANOSECONDS.sleep(10);
}
}
}

框架.java:

import java.awt.Color;
import java.awt.Graphics;
import java.io.IOException;
import javax.swing.JSlider;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JPanel;

public class Frame extends JPanel {
int menuNum = 0;
boolean first = true;

JButton nextButton = new JButton("Next");
JSlider slider = new JSlider(0,255,0);
JFileChooser fileChooser = new JFileChooser();

public Frame(Color background, int w, int h) throws IOException { //initialize
this.setBackground(background);
setFocusable(true);
}

public void paintComponent(Graphics G) {
super.paintComponent(G);

G.setColor(Color.WHITE);
G.drawString("MenuNum: " + menuNum, 1000, 500); //for debugging

if(menuNum == 0) { //first menu
if(first) { //only run once
first = false;

this.removeAll();
this.add(nextButton);

System.out.println("HERE");
}
if(fileChooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) { //if "Done" is selected
menuNum = 1; //go to next menu
first = true;
}
}

if(menuNum == 1) { //second menu
if(first) { //only run once
first = false;

this.removeAll();
this.add(nextButton);
this.add(slider); //<This is the slider that is not showing up

System.out.println("HERE2");
}
}
}
}

如果您在自己的计算机上运行此程序,则可以选择任何文件来测试它,因为它对所选文件不执行任何操作。

我对 JPanels 和 JFrames 有点陌生,所以任何建议将不胜感激。谢谢。

最佳答案

首先,绝对没有理由进行任何定制绘画。您永远不应该尝试在绘画方法中从 JPanel 添加/删除组件。

这些组件应该添加到类的构造函数中的面板中。所以这意味着应该将按钮添加到面板中。

然后向按钮添加一个 ActionListener。单击按钮时,您将进行一些处理。

如果您想更改 ActionListener 中面板上的组件,则基本逻辑是:

panel.remove(...);
panel.add(...);
panel.revalidate();
panel.repaint();

因此您需要 revalidate() 来调用布局管理器。否则添加的组件的大小为(0, 0),这意味着没有什么可绘制的。

阅读 Swing Tutorial 了解 Swing 基础知识。也许从以下部分开始:

  1. 如何编写 ActionListener
  2. 如何使用 slider
  3. 如何使用 CardLayout(而不是添加/删除组件)。

关于使用 JFileChooser 后 Java JSlider 不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56829776/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com